Compilateur C++ de Microsoft (cl.exe
, comme inclus dans Visual Studio) offre plusieurs commutateurs d'optimisation . La différence entre la plupart d'entre eux semble s'expliquer d'elle-même, mais je ne vois pas clairement quelle est la différence entre /O2
(qui optimise le code pour la vitesse maximale) et /Ox
(qui sélectionne "optimisation complète").
J'ai essayé de lire le documentation pour le /Ox
option, et il semble confirmer que ce commutateur permet également des optimisations pour la vitesse maximale, plutôt que la taille:
Le
/Ox
L'option du compilateur produit du code qui favorise la vitesse d'exécution par rapport à une taille plus petite.
Mais en particulier, la déclaration suivante sous la section "Remarques" a attiré mon attention:
En général, spécifiez
/O2
(Maximiser la vitesse) au lieu de/Ox
.
Donc ma question est, pourquoi devrait-on généralement favoriser /O2
plus de /Ox
? Cette dernière option permet-elle une optimisation particulière connue pour provoquer des bogues imprévus ou un comportement inattendu? Est-ce simplement que la quantité d'optimisation à gagner ne vaut pas le temps de compilation supplémentaire? Ou s'agit-il simplement d'une "recommandation" totalement dénuée de sens résultant du fait que /O2
est l'option par défaut dans VS?
réponse d'Asha cite un article de blog sur Visual Studio 2005 et est plutôt obsolète.
La dernière version de la documentation est disponible ici:
/Ox
: https://msdn.Microsoft.com/en-us/library/59a3b321.aspx/O2
: https://msdn.Microsoft.com/en-us/library/8f8h5cxt.aspxSelon ceux-ci:
/Ox
→ /Og /Oi /Ot /Oy /Ob2
/O2
→ la même chose, mais ajoute en outre /Gs /GF /Gy
Vous pouvez également être intéressé par /GS-
qui désactive les contrôles de sécurité autour de la pile, ce qui peut être un impact significatif sur les performances (voir MS docs for/GS ).
Vous devriez toujours comparer votre application spécifique.