IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Impact(s) de la création d'un grand nombre de variables locales ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut Impact(s) de la création d'un grand nombre de variables locales ?
    Bonjour à toutes et à tous,

    J'ai récupéré une application dont une des fonctions est appelée chaque 30 ms. Cette fonction nécessite beaucoup de variables locales et son code est assez imposant. Ces variables locales ne sont pas toutes utiles et j'en ai déjà supprimé quelques unes. Les variables sont de types différents comme par exemple basique (int, long, double, ...), structure ou classe.

    Les variables que j'ai conservé ne sont pas pas déclarées comme static et je me pose les questions suivantes :
    Q1 : Dois je modifier la déclaration de ces variables ou pas ?
    Q2 : Quel est l'impact sur la rapidité d'exécution si je laisse ces variable non static ?
    Q3 : Quel est l'impact au premier appel de la fonction sur la mémoire utilisée si autant que possible je change la déclaration de ces variables en static ?
    Q4 : On peut déclarer une classe static ?

    D'avance merci pour vos réponses.

    ++

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Quelques éléments de réponse :

    Les compilateurs (avec optimisations) arrivent en général très bien à ne pas tenir compte des variables inutilisées. Certains émettent même un warning quand ils en rencontre une.

    Les variables locales sont en général allouée sur la pile. Et allouer sur la pile de la place pour mille variables locales coute souvent le même prix que pour une seule (déplacer un pointeur).

    Donc je doute que tu gagne quoi que ce soit, sauf s'il y a des classes avec un gros constructeur (mais peut-on alors parler de variable inutile ?).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    Dans la fonction, les variables inutiles ne sont pas inutilisées ... simplement il n'est pas toujours nécessaire de stocker la valeur de retour d'une fonction dans une variable et la ligne suivante utiliser cette variable en paramètre d'une fonction ... ce sont ces variables là que j'ai supprimé quand c'était possible.

    Donc, pour en revenir à mes moutons, ce n'est pas nécessaire de déclarer les variables en static pour éviter d'avoir à les recréer toutes les 30 ms ? Sauf peut être pour les variables qui sont des grosses classes ou structures ?

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Intérêts du static -> variable que l'on ne calculera qu'une seule fois, ou dont la valeur sera partagée entre tous les appels à la fonction.
    Gros inconvénient -> pas réentrant

    Si la valeur sera calculée à chaque fois, je ne vois pas ce que cela pourrait apporter de plus.
    Après, si tu as plusieurs variables, le compilo devrait s'occuper comme un grand de ne faire qu'un seul push sur la pile ; je pense -- à moins que chacun fasse comme il l'entende.

    Si dans tous les cas tes variables sont nécessaires à l'ago, je ne vois pas pourquoi tu t'embêtes.

    Si tu as des initialisations qui seront toujours identiques entre deux appels -> refactorises, extraits un objet dont certaines variables seront initialisées une bonne fois pour toutes, et qui contiendra ton algo dans ses fonctions membres.


    Mais de toutes façons, quand on doit optimiser, on passe un profiler. On ne part pas à l'aveuglette comme tu me sembles être en train de le faire.


    PS: Les variables de retour nommées ont un mauvais impact sur le RVO. Par contre, elles sont débugables. Et pour ça, je suis prêt à payer.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    Ok, merci pour toutes ces informations.

    J'étais effectivement sur une mauvaise voie en tentant d'essayer d'optimiser le code sans analyse détaillée ... je n'ai fait que très peu de modifications et du coup, avant de recevoir ta réponse Luc, je restauré la version précédente de mon code. En attendant je suis en train de me former à l'utilisation du profiler livré avec VisualC++ Entreprise.

    Bref, je vais prendre en considération toutes les réponses, analyser en détail le code en utilisant le profiler et ensuite seulement je déciderai de ce qui doit être fait.

    Merci à tout le monde.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un grand nombre de segments undo
    Par emna1702 dans le forum Administration
    Réponses: 1
    Dernier message: 29/03/2012, 15h41
  2. Générer un grand nombre de variables aléatoires
    Par hazaki dans le forum Débuter
    Réponses: 3
    Dernier message: 31/01/2011, 10h35
  3. Réponses: 4
    Dernier message: 05/07/2009, 16h38
  4. Réponses: 2
    Dernier message: 18/08/2008, 18h53
  5. automatiser création grand nombre ligne
    Par grimat dans le forum Requêtes
    Réponses: 14
    Dernier message: 01/08/2007, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo