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 éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En théorie sans optimisation, il est fort possible que oui.
    En pratique, tout compilateur potable optimise le truc...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé

    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
    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 : 48
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    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
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    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, 15h44
  2. Performance parametre Vs variable locale Procedure stockee
    Par zoltar35 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/11/2012, 21h29
  3. [MFC] Globaliser une variable locale
    Par Philippe320 dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2005, 20h12
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 09/11/2005, 23h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

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