/Os, /Ot (Kompakten Code bevorzugen, Schnellen Code bevorzugen)
Aktualisiert: November 2007
Minimiert oder maximiert die Größe von EXE- und DLL-Dateien.
/Os
/Ot
Hinweise
/Os (Kompakten Code bevorzugen) minimiert die Größe von EXE- und DLL-Dateien durch die Anweisung an den Compiler, Programmgröße gegenüber Geschwindigkeit zu bevorzugen. Der Compiler kann viele C- und C++-Konstrukte zu funktional ähnlichen Maschinencodefolgen reduzieren. Gelegentlich muss dabei zwischen Größe und Geschwindigkeit abgewogen werden. Mit den Optionen /Os und /Ot können Sie eine Präferenz angeben:
/Ot (Schnellen Code bevorzugen) maximiert die Geschwindigkeit von EXE- und DLL-Dateien durch die Anweisung an den Compiler, Geschwindigkeit gegenüber Programmgröße zu bevorzugen. (Das ist die Standardeinstellung.) Der Compiler kann viele C- und C++-Konstrukte zu funktional ähnlichen Maschinencodefolgen reduzieren. Gelegentlich muss dabei zwischen Größe und Geschwindigkeit abgewogen werden. Die /Ot-Option ist durch die Geschwindigkeit maximieren (/O2/O1, /O2 (Größe minimieren, Geschwindigkeit maximieren))-Option impliziert. Bei der /O2-Option werden verschiedene Optionen kombiniert, um sehr schnellen Code zu erzeugen.
Wenn Sie /Os oder /Ot verwenden, müssen Sie ebenfalls /Og/Og (Globale Optimierungen) angeben, um den Code zu optimieren.
Hinweis: |
---|
Informationen, die bei Testläufen für die Profilerstellung erfasst wurden, überschreiben Optimierungen, die sonst bei Angabe von /Ob, /Os oder /Ot aktiv sind. Weitere Informationen finden Sie unter Profilgesteuerte Optimierungen (PGO). |
x86-spezifisch
Das nachfolgende Codebeispiel zeigt den Unterschied zwischen den Optionen Kompakten Code bevorzugen (/Os) und Schnellen Code bevorzugen (/Ot):
Hinweis: |
---|
Im Folgenden wird das erwartete Verhalten bei Verwendung von /Os oder /Ot beschrieben. Zwischen den einzelnen Versionen kann das Compilerverhalten in Bezug auf die Optimierung des unten aufgeführten Codes jedoch variieren. |
/* 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;
}
Der nachfolgende Ausschnitt aus dem Maschinencode zeigt, dass der Compiler den Multiplikationsausdruck in der return-Anweisung explizit als eine Multiplikation implementiert, um eine kurze, aber langsamere Codefolge zu erzeugen, wenn bei der Kompilierung von DIFFER.c kompakter Code bevorzugt wird (/Os):
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
Wenn bei der Kompilierung von DIFFER.c dagegen Geschwindigkeit bevorzugt wird (/Ot), implementiert der Compiler den Multiplikationsausdruck in der return-Anweisung als eine Folge von Schiebe- und LEA-Anweisungen, um eine schnelle, jedoch längere Codefolge zu erzeugen:
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
END x86-spezifisch
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Ausführliche Informationen finden Sie unter Gewusst wie: Öffnen von Projekteigenschaftenseiten.
Klicken Sie auf den Ordner C/C++.
Klicken Sie auf die Eigenschaftenseite Optimierung.
Ändern Sie die Eigenschaft Größe oder Geschwindigkeit bevorzugen.
So legen Sie diese Compileroption programmgesteuert fest
- Siehe FavorSizeOrSpeed.