permet de dire que j'ai écrit un programme en C et la compila avec GCC et G ++, quelle compilation sera plus rapide? GCC ou G ++? Je pense que la compilation G ++ le rendra lent, mais pas sûr de cela.
Permettez-moi de clarifier ma question à nouveau à cause de la confusion à propos de GCC. P>
Soit I Compiler le programme AC comme celui-ci sur la console. p> qui va fonctionner plus vite? p> p>
6 Réponses :
Je pense qu'ils produiront tous les deux le même code de la machine, et donc la même vitesse sur votre ordinateur. p>
Si vous voulez savoir, vous pouvez compiler l'assemblage pour les deux et comparer les deux, mais je parie que ils créent le même assemblage, et donc le même code de machine. P>
Ce que je pense, c'est que g ++ générera plus d'instruction en montage, peut donc prendre plus de temps que GCC?
@itsaboutCode: pourquoi? I> Il suffit de l'exécuter deux fois et de comparer la sortie si vous êtes inquiet.
Je suis convaincu qu'il y a une relation inverse entre l'expérience de programmation et le niveau de préoccupation concernant l'optimisation.
@Tyler: +1 Merci pour le rire! Je me demande s'il y a aussi une relation similaire pour la fascination avec x = x ++ + -x code> et d'autres non-sens UB comme ça.
Mythe: L'optimisation prématurée est la racine de tout mal. Vérité: L'amour de l'optimisation prématurée est la racine de tout mal. :)
http: //gcc.gnu .Org / OnlineDocs / GCC-3.3.6 / GCC / G_002B_002B-and-GCC.HTML P>
GCC est une collection de compilateur. Il est principalement utilisé pour la compilation de C, C ++, ADA, Java et de nombreuses autres langages de programmation.
G ++ fait partie de la collection GNU Compiler (GCC).
Je veux dire que GCC comprend G ++. Lorsque nous utilisons GCC pour la compilation de C ++, il utilise g ++. Les fichiers de sortie seront différents car le compilateur G ++ utilise sa propre bibliothèque de temps d'exécution. P>
GCC peut également faire référence au compilateur GNU C. Cela compilera CODE C ++ si la commande -lstdc ++, mais sera normalement étouffée et mourra, car elle ne tire pas dans les bibliothèques C ++. P>
g ++, le compilateur GNU C ++, comme le compilateur GNU C est une extrémité avant de la collection GNU Compiler. La différence entre le compilateur C est qu'il inclut automatiquement ces bibliothèques et fait quelques autres petits modifications, car il suppose que cela va être nourri au code C ++ pour compiler. P>
C'est là que vient la confusion. Cela clarifie-t-il des choses un peu? P>
Je les ai vus produire une assemblée différente sur le même code C.
Ce n'est pas tout à fait vrai. Les sections .dynstr, .rodata et .eh_frame sont significativement différentes dans mon programme de test trivial. Le code exécutable lui-même a un trampoline supplémentaire (_gxx_personality_v0 @ plt) et commande de certaines choses légèrement différemment dans la version g ++. Cela n'aura pas d'impact significatif sur le temps de chargement, mais ce n'est pas identique.
Selon la documentation, GNU GCC et GNU G ++ sont un et le même. S'ils produisent du code différent, je vais enquêter et transmettre cette information à la FSF pour avoir la documentation revisitée.
Outre les sections de données, j'ai vu le changement de code réel. Et je ne vois pas où ils prétendent que cela ne se produira pas.
-1: C et C ++ sont des langues différentes. Même si GCC et G ++ seraient le même programme (ce qu'ils ne le sont pas, ils sont deux frontes différentes) ils doivent compiler i> compiler certaines choses différemment si la sémantique du code (l'interprétation en C ou C ++) sont différents. Si cela fait ou non une différence significative, un indice de référence peut indiquer.
Cette réponse n'a pas répondu à la question.
Profilez-le et essayez-le. Je suis certain que cela dépendra du code actuel, même si cela nécessiterait potentiellement un cas vraiment étrange d'obtenir un bytecode différent. Bien que si vous n'avez pas externe c {} code> autour de votre code C et que vous travaillez bien en C, je ne sais pas comment "la compiler comme si elle était c ++" pourrait fournir une vitesse, Sauf si les optimisations de compilateur particulières dans g ++ viennent d'arriver em> être un peu mieux pour votre situation particulière ... p>
Le code de la machine généré doit être identique. La version g ++ d'A.out se liera probablement dans quelques bibliothèques de soutien supplémentaires. Cela rendra l'heure de démarrage de A.out être plus lente de quelques appels système. P>
Il n'y a pas vraiment de différence pratique cependant. La liaison Linux ne deviendra pas sensiblement plus lente tant que vous atteignez 20 à 40 bibliothèques liées et des milliers de symboles pour résoudre. P>
Les exécutables GCC et G ++ sont juste en tête, ce ne sont pas les compilateurs réels. Ils gèrent tous les deux les compilateurs C ou C ++ réels (et LD, AR, tout ce qui est nécessaire pour produire la sortie que vous avez demandée) en fonction des extensions de fichiers. Donc, vous obtiendrez exactement le même résultat. G ++ est couramment utilisé pour C ++ car il s'agit d'une liaison avec la bibliothèque C ++ standard (iostreams, etc.).
Si vous souhaitez compiler C code C ++, modifiez l'extension de fichier ou faire quelque chose comme ceci: p> < Pré> xxx pré> p>
Alors, qu'est-ce que vous dites si j'essaie de compiler C code C ++, cela peut prendre plus de temps que la compilation du code C?
Je ne sais pas. Mais puisque le compilateur C ++ doit naturellement être plus complexe, cela semble probable. Prendrait probablement beaucoup de code pour voir une différence, cependant. Vous pouvez l'essayer.
Man GCC: "G ++ est un programme qui appelle GCC et friands des fichiers .C, .h et .i Fichiers en tant que fichiers source C ++ au lieu de fichiers source C, sauf si -x est utilisé" i> Ceci est donc faux.
Désolé, il semble que g ++ est effectivement par défaut en mode C ++ pour les fichiers .c. Autre que mon explication est correcte selon certains tests rapides, je viens de faire avec Mingw 3.4.5. Encore une fois, cela pourrait être juste parce que Windows utilise une correspondance de nom de fichier insensible à une casse, et puisque. Capital C) est utilisé pour C ++ Code.
Premièrement: la question (et certaines des autres réponses) semblent être basées sur la prémisse défectueuse que c est un sous-ensemble strict de C ++, ce qui n'est pas en fait le cas. Compiler c comme c ++ est pas em> la même chose que la compilation que c: il peut modifier la signification de votre programme! C compilera principalement comme C ++ et donnera principalement les mêmes résultats, mais là-bas sont des choses qui sont définies explicitement em> donner un comportement différent. p> Voici un exemple simple - s'il s'agit de votre AC code>: p>
$ g++ a.c
$ ./a.out
1
+1. Pour ceux qui pourraient être intéressés par plus de détails sur ce sujet, il existe des tonnes de différences sur un exemple de caractère brillant. David R. Tribble a fait de bonnes recherches sur cela qui peut être trouvée ici . Wikipedia a un article appelé " Compatibilité de C et C ++ " qui est également utile .
Vous êtes peut-être intéressé à regarder shooterout.alioth.debian.org/u32q/c.php qui compare de nombreuses langues exécutant des programmes similaires. Il s'avère que certaines choses c sont plus rapides et certaines C ++ sont plus rapides, mais les différences sont assez mineures.