/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
, /Os
nebo /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
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností konfigurace>C/C++>Optimization.
Upravte vlastnost Upřednostnění nebo Rychlost.
Programové nastavení tohoto parametru kompilátoru
- Viz třída FavorSizeOrSpeed.
Viz také
/O options (Optimalizace kódu)
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC