Share via


/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, /Osou /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

  1. 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.

  2. Sélectionnez la page des propriétés>de configuration C/C++>Optimisation.

  3. Modifiez la propriété Favor Size ou Speed .

Pour définir cette option du compilateur par programmation

Voir aussi

Options /O (Optimiser le code)
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC