Share via


/Os, /Ot (upřednostnění malého kódu, upřednostnění rychlého kódu)

Možnosti kompilátoru /Os/Ot určují, jestli se má při optimalizaci kódu upřednostňovat velikost (/Os) nebo rychlost (/Ot).

Syntaxe

/Os
/Ot

Poznámky

/Os (Upřednostnění malého kódu) minimalizuje velikost exes a knihoven DLL pokynem kompilátoru, aby upřednostňuje velikost přes rychlost. Kompilátor může snížit množství konstruktorů jazyka C a C++ na funkčně podobné sekvence strojového kódu. V některých případech tyto rozdíly nabízejí kompromisy mezi velikostí a rychlostí. /Ot Možnosti /Os umožňují určit předvolbu pro jednu z nich:

/Ot (Upřednostněte rychlý kód) maximalizuje rychlost exes a knihoven DLL tím, že kompilátoru dává pokyn, aby upřednostňoval rychlost nad velikostí. /Ot je výchozí, pokud jsou povoleny optimalizace. Kompilátor může snížit množství konstruktorů jazyka C a C++ na funkčně podobné sekvence strojového kódu. V některých případech tyto rozdíly nabízejí kompromisy mezi velikostí a rychlostí. Možnost /Ot je odvozena /O2 z možnosti (Maximalizovat rychlost). Tato /O2 možnost kombinuje několik možností pro rychlejší vytváření kódu.

Poznámka

Informace shromážděné z profilace testovacích běhů přepíší všechny optimalizace, které by jinak platit, pokud zadáte /Ob, /Osnebo /Ot. Další informace najdete v tématu Optimalizace s asistencí profilu.

Příklad specifický pro x86

Následující ukázkový kód ukazuje rozdíl mezi /Os možností (Favor small code) a možností (Upřednostnění rychlého /Ot kódu):

Poznámka

Tento příklad popisuje očekávané chování při použití /Os nebo /Ot. Chování kompilátoru z verze do vydání však může vést k různým optimalizacem kódu níže.

/* 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;
}

Jak je znázorněno v fragmentu kódu počítače níže, při differ.c kompilaci pro velikost (/Os), kompilátor implementuje výraz násobení v příkazu return explicitně jako násobení, aby vytvořil krátkou, ale pomalejší sekvenci kódu:

mov    eax, DWORD PTR _x$[ebp]
imul   eax, 71                  ; 00000047H

differ.c Pokud je kompilátor zkompilován pro rychlost (/Ot), kompilátor implementuje výraz násobení ve návratovém příkazu jako řadu směn a LEA instrukcí, aby vytvořil rychlou, ale delší sekvenci kódu:

mov    eax, DWORD PTR _x$[ebp]
mov    ecx, eax
shl    eax, 3
lea    eax, DWORD PTR [eax+eax*8]
sub    eax, ecx

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností konfigurace>C/C++>Optimization.

  3. Upravte vlastnost Upřednostnění nebo Rychlost.

Programové nastavení tohoto parametru kompilátoru

Viz také

/O options (Optimalizace kódu)
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC