/Os, /Ot (Favor Small Code, Favor Fast Code)

Die /Os Und /Ot Compileroptionen geben an, ob größe (/Os) oder geschwindigkeit (/Ot) beim Optimieren von Code bevorzugt werden soll.

Syntax

/Os
/Ot

Hinweise

/Os (Favor Small Code) minimiert die Größe von EXEs und DLLs, indem der Compiler angewiesen wird, die Größe gegenüber der Geschwindigkeit zu bevorzugen. Der Compiler kann viele C- und C++-Konstrukte auf funktional ähnliche Sequenzen von Computercode reduzieren. Gelegentlich bieten diese Unterschiede Kompromisse zwischen Größe und Geschwindigkeit. Mit /Os den Optionen /Ot können Sie eine Einstellung für eine einstellung für die andere angeben:

/Ot (Favor Fast Code) maximiert die Geschwindigkeit von EXEs und DLLs, indem der Compiler angewiesen wird, die Geschwindigkeit gegenüber der Größe zu bevorzugen. /Ot ist die Standardeinstellung, wenn Optimierungen aktiviert sind. Der Compiler kann viele C- und C++-Konstrukte auf funktional ähnliche Sequenzen von Computercode reduzieren. Gelegentlich bieten diese Unterschiede Kompromisse zwischen Größe und Geschwindigkeit. Die /Ot Option wird durch die /O2 Option (Geschwindigkeit maximieren) impliziert. Die /O2 Option kombiniert mehrere Optionen, um schnelleren Code zu erzeugen.

Hinweis

Informationen, die aus Profilerstellungstests gesammelt werden, überschreiben alle Optimierungen, die andernfalls wirksam sind, wenn Sie angeben/Ob, oder /Os/Ot. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen.

x86-spezifisches Beispiel

Der folgende Beispielcode veranschaulicht den Unterschied zwischen der /Os Option (kleinem Code favorisieren) und der /Ot Option (Schnellcode favorisieren):

Hinweis

In diesem Beispiel wird das erwartete Verhalten bei Verwendung /Os oder /Ot. Das Compilerverhalten von Release zu Release kann jedoch zu unterschiedlichen Optimierungen für den folgenden Code führen.

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

Wie im folgenden Fragment des Computercodes dargestellt, implementiert/Os der Compiler den Multiplikationsausdruck in der Return-Anweisung explizit als Multiplikation, differ.c um eine kurze, aber langsamere Codesequenz zu erzeugen:

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

differ.c Alternativ implementiert der Compiler bei der Kompilierung für Geschwindigkeit (/Ot) den Multiplikationsausdruck in der Rückgabeanweisung als Eine Reihe von Schichten und LEA Anweisungen, um eine schnelle, aber längere Codesequenz zu erzeugen:

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

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Wählen Sie die Konfigurationseigenschaftenseite>C/C++>-Optimierung aus.

  3. Ändern Sie die Eigenschaft "Favor Size" oder "Speed ".

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

/O-Optionen (Optimierungscode)
MSVC-Compileroptionen
MSVC-Compiler-Befehlszeilensyntax