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 :

Variables localement déclarées et performance


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Variables localement déclarées et performance
    Salut,

    Je me pose très souvent la question suivante.

    Est ce que l'exemple de code ci dessous s'exécute plus vite que l'autre exemple qui le suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char temp[256];
    int i = 0;
    for (i=0; i<1000; i++)
    {
    sprintf(temp, "%d", i);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int i = 0;
    for (i=0; i<1000; i++)
    {
    char temp[256];
    sprintf(temp, "%d", i);
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    En théorie sans optimisation, il est fort possible que oui.
    En pratique, tout compilateur potable optimise le truc...

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Médinoc
    En théorie sans optimisation, il est fort possible que oui.
    En pratique, tout compilateur potable optimise le truc...
    Le compilo de Visual C++ par exemple ?
    Et sinon dans l'absolu, pour des cas un peu plus complexes, vaut-il mieux écrire la première ou la deuxième version ? La deuxième se voudrait respecter une règle de codage qui préconise une déclaration des variables locales au plus près de leur utilisation...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Je suis à 100% pour la seconde.
    La seule raison qui pourrait me faire écrire la première, c'est si j'avais besoin du contenu du buffer une fois la boucle terminée, ou d'une itération à l'autre.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Je vais faire hurler les puristes, mais bien que ne respectant pas cette règle, je suis 100% pour la première

    En effet, je considère que la déclaration de variables limitée au plus proche de l'instruction est lisible et compréhensible instantanément lorsqu'il s'agit d'un petit morceau de code du style debug ou autre, mais je suis résolument contre en ce qui concerne des routines assez grandes, particulièrement pour des raisons de maintenance et de portage.

    En effet, lorsqu'on reprend ou maintient de gros codes, on a envie d'avoir en un seul coup d'oeil ce que fait la routine et ce dont elle se sert. Il est très pénible d'avoir à explorer ligne à ligne pour connaître toutes les variables à utiliser. Et c'est d'autant plus vrai si on veut porter le code sous un autre langage.

    Enfin, pour l'exemple cité, à l'intérieur d'une boucle, je considère que l'instruction de début (for) fait partie de l'ensemble, et non ce qui est contenu dans les accolades. Donc dans ce cas précis (comme lors d'un while) je ne considère pas les accolades comme limitant l'instruction, mais le "f" et la fin de l'accolade.


    Mais ce n'est qu'un avis de praticien et non de théoricien

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par souviron34
    Enfin, pour l'exemple cité, à l'intérieur d'une boucle, je considère que l'instruction de début (for) fait partie de l'ensemble, et non ce qui est contenu dans les accolades. Donc dans ce cas précis (comme lors d'un while) je ne considère pas les accolades comme limitant l'instruction, mais le "f" et la fin de l'accolade.

    Mais ce n'est qu'un avis de praticien et non de théoricien
    Je suis du même avis, d'ailleurs je vois très bien et cela a toujours été le cas, une boucle for (comme while aussi) son expression et ses instruction comme un tout unique, comme on le ferais en assembleur par exemple

  7. #7
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Ok bien compris, merci à tous.

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

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 16h44
  2. Performance parametre Vs variable locale Procedure stockee
    Par zoltar35 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/11/2012, 22h29
  3. [MFC] Globaliser une variable locale
    Par Philippe320 dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2005, 21h12
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 10/11/2005, 00h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 09h22

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