/Os
, /Ot
(Faworyzowanie małego kodu, faworyzowanie szybkiego kodu)
Opcje kompilatora /Os
i /Ot
określają, czy przy optymalizowaniu kodu mają być preferowane rozmiary (/Os
) czy szybkość (/Ot
).
Składnia
/Os
/Ot
Uwagi
/Os
(Preferuj mały kod) minimalizuje rozmiar eksesów i bibliotek DLL, instruując kompilator, aby faworyzował rozmiar na dużą szybkość. Kompilator może zmniejszyć wiele konstrukcji języka C i C++ do funkcjonalnie podobnych sekwencji kodu maszynowego. Czasami te różnice oferują kompromisy wielkości w porównaniu z szybkością. Opcje /Os
i /Ot
umożliwiają określenie preferencji dla jednej nad drugą:
/Ot
(Preferuj szybki kod) maksymalizuje szybkość eksesów i bibliotek DLL, instruując kompilatorowi, aby przyspieszył przekroczenie rozmiaru. /Ot
jest wartością domyślną, gdy optymalizacje są włączone. Kompilator może zmniejszyć wiele konstrukcji języka C i C++ do funkcjonalnie podobnych sekwencji kodu maszynowego. Czasami te różnice oferują kompromisy wielkości w porównaniu z szybkością. Opcja /Ot
jest dorozumiana przez /O2
opcję (Maksymalizuj szybkość). Opcja /O2
łączy kilka opcji w celu szybszego tworzenia kodu.
Uwaga
Informacje zebrane z przebiegów testu profilowania zastępują wszelkie optymalizacje, które w przeciwnym razie będą obowiązywać, jeśli określisz /Ob
wartość , /Os
lub /Ot
. Aby uzyskać więcej informacji, zobacz Profile-Guided Optimizations (Optymalizacje sterowane profilem).
Przykład specyficzny dla architektury x86
Poniższy przykładowy kod demonstruje różnicę między /Os
opcją (Preferuj mały kod) i opcją /Ot
(Faworyzowanie szybkiego kodu):
Uwaga
W tym przykładzie opisano oczekiwane zachowanie podczas korzystania z programu /Os
lub /Ot
. Jednak zachowanie kompilatora od wydania do wydania może spowodować różne optymalizacje dla poniższego kodu.
/* 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 pokazano w poniższym fragmentcie kodu maszynowego, gdy differ.c
kompilator jest kompilowany pod kątem rozmiaru (/Os
), kompilator implementuje wyrażenie mnożenia w instrukcji return jawnie jako mnożenie w celu utworzenia krótkiej, ale wolniejszej sekwencji kodu:
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
Alternatywnie, gdy differ.c
jest kompilowany pod kątem szybkości (/Ot
), kompilator implementuje wyrażenie mnożenia w instrukcji return jako serię zmian i LEA
instrukcji, aby utworzyć szybką, ale dłuższą sekwencję kodu:
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę właściwości>Właściwości konfiguracji C/C++>Optimization.
Zmodyfikuj właściwość Favor Size lub Speed .
Aby programowo ustawić tę opcję kompilatora
- Zobacz: FavorSizeOrSpeed.
Zobacz też
/O options (Optymalizuj kod)
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC