/Og (Globale Optimierungen)

Veraltet. Bietet lokale und globale Optimierungen, automatische Registerzuordnung und Schleifenoptimierung. Es wird empfohlen, stattdessen /O1 entweder (Größe minimieren) oder /O2 (Geschwindigkeit maximieren) zu verwenden.

Syntax

/Og

Bemerkungen

/Og ist veraltet. Diese Optimierungen sind jetzt standardmäßig aktiviert, wenn Optimierungen aktiviert sind. Weitere Informationen zu Optimierungen finden Sie unter /O1, /O2 (Größe minimieren, Geschwindigkeit maximieren) oder /Ox (Optimierung der meisten Geschwindigkeiten aktivieren).

Die folgenden Optimierungen sind unter verfügbar /Og:

  • Lokale und globale Entfernung gemeinsamer Teilausdrucke

    Bei dieser Optimierung wird der Wert eines allgemeinen Teilausdrucks einmal berechnet. Wenn sich im bc folgenden Beispiel die Werte von und nicht zwischen den drei Ausdrücken ändern, b + c kann der Compiler die Berechnung von einer temporären Variablen zuweisen und diese Variable für verwenden b + c:

    a = b + c;
    d = b + c;
    e = b + c;
    

    Zur Optimierung lokaler gemeinsamer Teilausdrucke untersucht der Compiler kurze Codeabschnitte auf allgemeine Teilausdrucke. Für eine globale Optimierung des allgemeinen Teilausdrucks durchsucht der Compiler ganze Funktionen nach allgemeinen Teilausdrucken.

  • Automatische Registerzuordnung

    Durch diese Optimierung kann der Compiler häufig verwendete Variablen und Teilausdrucke in Registern speichern. Das register Schlüsselwort wird standardmäßig ignoriert und verursacht eine Diagnose unter /std:c++17 oder höher.

  • Schleifenoptimierung

    Diese Optimierung entfernt invariante Teilausdrucke aus dem Text einer Schleife. Eine optimale Schleife enthält nur Ausdrücke, deren Werte sich bei jeder Ausführung der Schleife ändern. Im folgenden Beispiel ändert sich der Ausdruck x + y nicht im Schleifenkörper:

    i = -100;
    while( i < 0 ) {
        i += x + y;
    }
    

    Nach der Optimierung wird x + y einmal und nicht jedes Mal berechnet, wenn die Schleife ausgeführt wird:

    i = -100;
    t = x + y;
    while( i < 0 ) {
        i += t;
    }
    

    Loop Optimierung ist viel effektiver, wenn der Compiler kein Aliasing annehmen kann, das Sie mit __restrict, noaliasoder festlegenrestrict.

    Hinweis

    Sie können die globale Optimierung auf Funktionsbasis aktivieren oder deaktivieren, indem Sie das optimize Pragma zusammen mit der Option g verwenden.

Weitere Informationen finden Sie unter /Oi (Intrinsische Funktionen generieren) und /Ox (Aktivieren der meisten Geschwindigkeitsoptimierungen).

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 Eigenschaftenseite KonfigurationseigenschaftenC>/C++>- Befehlszeile aus.

  3. Geben Sie die Compileroption in das Feld Zusätzliche Optionen ein.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

Syntax für die MSVC-Compilerbefehlszeile