Udostępnij za pośrednictwem


/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 /Obwartość , /Oslub /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

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

  2. Wybierz stronę właściwości>Właściwości konfiguracji C/C++>Optimization.

  3. Zmodyfikuj właściwość Favor Size lub Speed .

Aby programowo ustawić tę opcję kompilatora

Zobacz też

/O options (Optymalizuj kod)
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC