7
votes

Les déclarations multiples du même type affectent-elles l'heure de compilation?

Je me demandais si la déclaration de plusieurs choses du même type affecte la durée de compilation, telle que ci-dessous. xxx

vs xxx

c c++

4 commentaires

Pourquoi quelqu'un sur Terre utilisera-t-il une première forme? Ce n'est pas très sympathique.


Balog: Il est rare, mais c'est parfaitement valide. De même, cette déclaration est également valide: int A, * b, c [4], d (flotteur), (* e) (char); . Il déclare un INT, un pointeur INT, une gamme d'INTS, une fonction renvoyant un int (et prenant un flotteur) et un pointeur à une fonction renvoyant un int (et prenant un char). C'est moche, mais valide C.


La bonne chose à propos de tout ce que nous ne savons pas est d'essayer. Et je ne comprends pas pourquoi cette question est votée.


Même si tout le monde sur terre faisait une compilation plus rapide (selon celle-ci) avec un compilateur moderne, le temps sauvé serait moins que le temps déjà consacré à cette question.


9 Réponses :


6
votes

Pas sensiblement. Ne vous inquiétez pas pour ça.


1 commentaires

Je conseillerais d'utiliser le deuxième formulaire comme une question de style, mais la différence de temps de compilation n'est pas susceptible d'être importante du tout, et votre temps est mieux consacré à vous inquiéter de votre code actuel, la quantité de code que vous êtes #include. -ing, et ainsi de suite.



4
votes

Il n'y a pas une grande partie de la différence de compilation. Mais il est préférable d'utiliser le 2ème parce que c'est plus standard, lisible et compréhensible. Je vais essayer de modifier cette réponse en référence sur le temps de compilation.


0 commentaires

0
votes

Bien sûr que c'est la même chose. Personne n'écrira la première édition


1 commentaires

au moins espérons que cela ne survivra jamais à un examen



7
votes

Je serais surpris si cela ne comptait pas du tout puisque le compilateur exécutera un code différent pour les deux cas, mais il est impossible de deviner lequel il serait plus rapide et si on serait toujours plus rapide que l'autre.

Je serais également surpris s'il était possible de mesurer la différence de manière significative, car elle ne serait probablement jamais une question de plus de quelques microsecondes.

Si vous rencontrez des problèmes avec le temps de compilation, le style de déclaration n'est pas la cause.


1 commentaires

En outre, les différences minuscules diffèrent probablement entre les compilateurs.



0
votes

Question mérite de demander. Si vous gardez l'habitude d'aller voir comment votre compilateur transforme réellement votre code C ++ en montage, il est plus facile de répondre: les deux définitions émettront exactement le même code d'assemblage. Par exemple, j'ai compilé un petit test (en utilisant l'entrée et la sortie pour éviter une optimisation de pliage constant), et les deux versions générées le même binaire exacte (byTewise identique).

0x100000ef6:  movq   %rsi, -16(%rbp)


1 commentaires

Il semble que vous répondiez du point de vue du temps d'exécution, mais la question concerne la compilation de temps.



0
votes

Les deux sont identiques, mais il est toujours bon d'utiliser le second afin que le code soit plus structuré, lisible et sera facile à comprendre par une autre personne autre que vous. Le premier ajoutera plus de confusion.


0 commentaires

0
votes

Réponse simple sur une courte question: non.


0 commentaires

6
votes

Cette réponse discute de la raison pour laquelle le code proposé fait peu de différence pour le temps de compilation, qui aucune des autres réponses ne traite actuellement.

Typiquement, une partie de la structure de base d'un compilateur moderne est la suivante:

  • Il y a une partie qui lit chaque personnage correspond aux caractères à des modèles simples (tels que "une séquence de lettres et de chiffres commençant par une lettre" ou "+" ou "/ * text * /", et des paquets jetons avec des données supplémentaires (identifiant avec texte pour nom, opérateur de type +, espace blanc). Cette partie s'appelle l'analyseur lexical.
  • Il y a une partie qui reçoit les jetons et analyse sa structure syntaxique.
  • Il y a d'autres parties qui ne nous concernent pas ici.

    La partie qui analyse la structure syntaxique fait quelque chose comme ceci: lorsqu'il reconnaît a () dans une déclaration telle que annulation a () , il appelle une routine ailleurs Dans le compilateur qui enregistre A comme identifiant avec type fonction renvoyer le vide . Cela se produit lorsque a () est reconnu, lorsque B () est reconnu et lorsque c () est reconnu.

    La chose importante dans ce cas est que la même chose se passe avec les deux séquences de code proposées: a () , b () et c () < / Code> sont tous reconnus et la même séquence d'appels de routine est faite pour enregistrer ces identificateurs. À partir de ce moment, le traitement d'eux est identique. Dans les compilateurs typiques, il n'y aura aucune différence dans la manière dont a () , b () et c () sont traités.

    Cela signifie que la seule différence dans le traitement du compilateur de ces séquences de code est dans l'analyseur lexical et dans le processeur de syntaxe. Pour l'une des séquences de code, il y a quelques caractères de plus et quelques jetons supplémentaires, de sorte que la séquence de code est susceptible de prendre légèrement plus de temps à traiter. Cependant, avec la vitesse des ordinateurs d'aujourd'hui, cette quantité de temps est minuscule.

    Il est possible que de légères différences dans le traitement puissent avoir des effets en cascade, s'ils affectent ce qui affecte ce qui est stocké dans le cache de processeur ou quelle mémoire est allouée et libérée. Cependant, ceux-ci sont complètement accessoires, de la même manière que, si un mécanicien fonctionne sur une voiture et qu'il arrive à déplacer leur clé dans une étagère différente tout en le faisant, cela peut affecter la durée pendant laquelle cela les prend pour travailler sur la voiture suivante car elles ont marcher sur l'étagère pour obtenir la clé. C'est juste des points de théâtre et non une cause à effet significatif.


0 commentaires

2
votes

Pourquoi aller pour la 1ère option?

Les deux semblent prendre la même heure pour moi depuis sa déclaration. Le compilateur prendra chacun comme 3 avidité, même le vide est écrit une fois de trois fois. Mais va chercher dans la compilation de temps en détail.

mais sérieusement, un programmeur ira pour une seconde puisqu'il s'agit de la marque des normes d'écriture de code conduisant à la beauté du code.


0 commentaires