Comment désactiver les optimisations des compilateurs dans gcc?

j'essaie d'apprendre le langage de l'Assemblée. J'ai cherché et trouvé comment démonter un fichier .c mais je pense qu'il produit une version optimisée du programme. Y a-t-il un moyen pour que je puisse voir le code d'assemblage exact qui correspond à mon fichier C.

57
demandé sur gsamaras 2011-04-23 21:58:44

5 réponses

l'option gcc -O permet différents niveaux d'optimisation. Utilisez -O0 pour les désactiver et utilisez -S pour l'assemblage de sortie. -O3 est le plus haut niveau d'optimisation.

à partir de gcc 4.8 le niveau d'optimisation -Og est disponible. Il permet des optimisations qui n'interfèrent pas avec le débogage et est recommandé par défaut pour le cycle d'édition-compilation-débogage standard.

Pour changer le dialecte de l'ensemble à intel ou att utiliser -masm=intel ou -masm=att .

Vous pouvez également activer certaines optimisations manuellement avec -fname .

regardez le manuel gcc pour beaucoup plus.

80
répondu pmr 2016-04-27 08:55:13

pour gcc vous voulez omettre toutes les options - O1-O2 ou - O3 passées au compilateur ou si vous les avez déjà, vous pouvez ajouter l'option - o0 pour l'éteindre à nouveau. Il pourrait également vous aider à ajouter -g pour le débogage afin que vous puissiez voir la source c et le code machine démonté dans votre débogueur.

voir aussi: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html

7
répondu IanNorton 2011-04-23 18:02:53

Utiliser le commutateur -O0 (-[capital][zero] pour désactiver l'optimisation, et -S fichier d'assemblage. Regardez ici pour voir plus d'options de ligne de commande gcc.

6
répondu MByD 2014-02-24 05:08:15

Pour tester sans copie élision et de vous voir de copier/déplacer des constructeurs/opérateurs de l'action ajouter "-fno-éluder-constructeurs".

même sans optimisations (-O0 ), GCC et Clang vont toujours copier elision, ce qui a pour effet de sauter les constructeurs copy/move dans certains cas. Voir cette question pour les détails sur la copie décision.

cependant, dans Clang 3.4 il déclenche un bug (un objet temporaire invalide sans calling constructor), qui est fixé en 3.5.

4
répondu user3770818 2017-05-23 10:29:54

vous pouvez désactiver les optimisations si vous passez-O0 avec la ligne de commande gcc.

E. G. tourner un .C fichier dans un .S appel de fichier:

gcc-o0-s test.c

1
répondu Nils Pipenbrinck 2011-04-23 18:02:23