70 votes

Quelle est la différence entre l' /Ox et /O2 options du compilateur?

Microsoft compilateur C++ (cl.exe, inclus avec Visual Studio) propose plusieurs commutateurs d'optimisation. La différence entre la plupart d'entre eux semblent évidentes, mais il n'est pas clair pour moi ce qu'est la différence entre /O2 (ce qui optimise le code de vitesse maximale) et /Ox (qui sélectionne les "optimisation").

J'ai essayé la lecture de la documentation pour l' /Ox option, et il semble confirmer que ce commutateur permet également l'optimisation de la vitesse maximale, plutôt que de taille:

L' /Ox option de compilateur produit du code qui favorise la vitesse d'exécution de plus petite taille.

Mais en particulier, l'instruction suivante dans la section "Remarques" a attiré mon attention:

En général, spécifiez /O2 (Vitesse maximum) au lieu de /Ox.

Donc ma question est, pourquoi devrait-on généralement faveur /O2 sur /Ox? La dernière option activer
un particulier de l'optimisation connu pour causer des imprévus bugs ou autre comportement inattendu? Est-ce simplement que le montant de l'optimisation des acquis n'est pas la peine supplémentaires moment de la compilation? Ou est-ce juste un complètement dénuée de sens "recommandation" résultant du fait qu' /O2 est la valeur par défaut de l'option de VS?

51voto

Asha Points 5976

Je l'ai trouvé ici:

Ox et O2 sont presque identiques. Ils ne diffèrent que par le fait que O2 aussi jette GF et Gy. Il n'y a presque pas de raison pour éviter de jeter ces deux les commutateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X