Comment construire en mode release, avec optimisation de GCC?
Quelles sont les options dont j'aurais besoin pour construire en "mode release" avec plein d'optimisations dans GCC? Si il y a plus d'une option, veuillez les énumérer tous. Merci.
OriginalL'auteur Polaris878 | 2009-10-08
Vous devez vous connecter pour publier un commentaire.
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Il n'existe pas de "one size fits all" - vous avez besoin de comprendre votre demande, vos besoins et l'optimisation des indicateurs pour déterminer le sous-ensemble de vos données binaires.
Ou la réponse que vous souhaitez:
-O3
En outre, le point de se montrer dans les moteurs de recherche comme Google, donc de son mieux pour avoir ici de toute façon.
Appel juste. Est-ce que vous avez été au bout? Ou avez-vous besoin d'un peu plus de contexte/info?
Souvent, vous aurez envie
-DNDEBUG
trop à dépouiller les assertions.Et vous pouvez
-march=native -mtune=native
ainsi, aussi longtemps que vous n'allez pas à distribuer des binaires à d'autres machines.OriginalL'auteur Josh
Ici est une partie d'un Makefile que j'utilise régulièrement (dans cet exemple, c'est essayer de construire un programme nommé foo).
Si vous l'exécutez comme
$ make BUILD=debug
ou$ make debug
puis le Debug CFLAGS sera utilisé. Ces désactiver l'optimisation (
-O0
) et contient les symboles de débogage (-g
).Si vous omettez ces drapeaux (en exécutant
$ make
sans paramètres supplémentaires), vous allez construire la Libération CFLAGS version où l'optimisation est activée (-O2
), les symboles de débogage dépouillé (-s
) et les assertions désactivé (-DNDEBUG
).Comme d'autres l'ont suggéré, vous pouvez expérimenter avec différents
-O*
paramètres dependig sur vos besoins spécifiques.OriginalL'auteur Wernsey
Noter que gcc ne dispose pas d'une version "mode" et "debug mode" comme MSVC. Tout le code, c'est du code. La présence des différentes options d'optimisation (-O2 et-Os sont les seuls dont vous avez généralement besoin de se soucier de si vous ne le faites très fine tuning) modifie le code généré, mais pas d'une manière d'empêcher l'interopérabilité avec d'autres ABI code compatible. En général, vous voulez de l'optimisation sur des choses que vous souhaitez publier.
La présence de l'option "-g" va entraîner des symbole et le code source d'information pour être placées dans les fichiers générés, ce qui est utile pour le débogage, mais augmente la taille du fichier (et révèle votre code source), ce qui est quelque chose que vous ne voulez pas dans "libéré" binaires.
Mais ils ne sont pas exclusifs. Vous pouvez avoir un binaire compilé avec l'optimisation et les informations de débogage, ou l'un avec l'autre.
C'est pas méchant, je regarde la pile de détritus et valgrind sortie de "libération" binaires de tous les temps. Tant que vous n'utilisez pas-fomit-pile-pointeur et de comprendre que la statique pourrait être incorporé et invisible, vous pouvez lire un tas de contexte, même un très binaire optimisé. Si vos fonctions sont courts, vous pouvez généralement déterminer l'expression qui s'est écrasé avec une supposition ou deux.
Contrairement à un film de David Lynch, cependant, les débogueurs de laisser le spectateur alterner à volonté entre les différents niveaux de la réalité. Si vous comprenez le démontage, puis pas à pas au travers (avec les lignes de source entrecoupées) rend habituellement une certaine quantité de sens, même avec l'optimisation. Si vous ne comprenez pas le démontage, alors vous allez apprendre.
Sur une note connexe, il ya des façons de garder les symboles de débogage pour l'entretien à "Libération" construit. Une façon de le faire:
gcc -g source.cc -o a.out; strip a.out -o a.out.syms; strip a.out
. Utilisationobjdump -t a.out
pour vérifier les symboles ont effectivement été dépouillé.OriginalL'auteur Andy Ross
-O2 va tourner sur toutes les optimisations qui ne nécessitent pas un espace\vitesse hors commerce et tend à être celui que je vois le plus souvent utilisé. -O3 n'a de l'espace pour la vitesse des échanges(comme une fonction inline.) -Système d'exploitation ne O2 plus fait d'autres choses pour réduire la taille du code. Cela peut rendre les choses plus vite que d'O3 par l'amélioration de la cache d'utilisation. (test pour savoir si cela fonctionne pour vous.) Remarque: il existe un grand nombre d'options qu'aucun des O commutateurs de contact. La raison pour laquelle ils sont de gauche est qu'il dépend souvent de ce genre de code que vous écrivez ou sont très dépendants de l'architecture.
OriginalL'auteur stonemetal