/Os
, /Ot
(Favoriser le petit code, Favoriser le code rapide)
Les /Os
options du /Ot
compilateur spécifient s’il faut privilégier la taille (/Os
) ou la vitesse (/Ot
) lors de l’optimisation du code.
Syntaxe
/Os
/Ot
Notes
/Os
(Favoriser le petit code) réduit la taille des EXEs et des DLL en demandant au compilateur de favoriser la taille par rapport à la vitesse. Le compilateur peut réduire de nombreuses constructions C et C++ à des séquences fonctionnellement similaires du code machine. Parfois, ces différences offrent des compromis de taille par rapport à la vitesse. Les /Os
options /Ot
et les options vous permettent de spécifier une préférence pour l’une par rapport à l’autre :
/Ot
(Favoriser le code rapide) optimise la vitesse des EXEs et des DLL en demandant au compilateur de favoriser la vitesse par rapport à la taille. /Ot
est la valeur par défaut lorsque les optimisations sont activées. Le compilateur peut réduire de nombreuses constructions C et C++ à des séquences fonctionnellement similaires du code machine. Parfois, ces différences offrent des compromis de taille par rapport à la vitesse. L’option /Ot
est implicite par l’option (Optimiser la /O2
vitesse). L’option /O2
combine plusieurs options pour produire du code plus rapide.
Remarque
Les informations collectées à partir des exécutions de test de profilage remplacent toutes les optimisations qui seraient en vigueur si vous spécifiez /Ob
, /Os
ou /Ot
. Pour plus d’informations, consultez Optimisations guidées par profil.
Exemple spécifique à x86
L’exemple de code suivant illustre la différence entre l’option (Favoriser le /Os
petit code) et l’option (Favoriser le /Ot
code rapide) :
Remarque
Cet exemple décrit le comportement attendu lors de l’utilisation /Os
ou /Ot
. Toutefois, le comportement du compilateur d’une version à l’autre peut entraîner des optimisations différentes pour le code ci-dessous.
/* differ.c
This program implements a multiplication operator
Compile with /Os to implement multiply explicitly as multiply.
Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
return x * 71;
}
Comme indiqué dans le fragment de code d’ordinateur ci-dessous, lorsqu’il differ.c
est compilé pour la taille (/Os
), le compilateur implémente l’expression de multiplication dans l’instruction return explicitement en tant que multiplication pour produire une séquence de code courte mais plus lente :
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
Sinon, lorsqu’il differ.c
est compilé pour la vitesse (/Ot
), le compilateur implémente l’expression de multiplication dans l’instruction return sous la forme d’une série d’instructions et LEA
de décalage pour produire une séquence de code rapide mais plus longue :
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page des propriétés>de configuration C/C++>Optimisation.
Modifiez la propriété Favor Size ou Speed .
Pour définir cette option du compilateur par programmation
- Consultez FavorSizeOrSpeed.
Voir aussi
Options /O (Optimiser le code)
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC