/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
Ö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).
Wählen Sie die Konfigurationseigenschaftenseite>C/C++>-Optimierung aus.
Ändern Sie die Eigenschaft "Favor Size" oder "Speed ".
So legen Sie diese Compileroption programmgesteuert fest
- Siehe FavorSizeOrSpeed.
Siehe auch
/O-Optionen (Optimierungscode)
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile