Freigeben über


/Og (Globale Optimierungen)

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

Syntax

/Og

Hinweise

/Og ist veraltet. Diese Optimierungen sind jetzt standardmäßig aktiviert, wenn optimierungen aktiviert sind. Weitere Informationen zu Optimierungen finden Sie unter /O1, ( /O2 Minimieren von Größe, Maximieren der Geschwindigkeit) oder /Ox (Aktivieren der meisten Geschwindigkeitsoptimierungen)

Die folgenden Optimierungen sind verfügbar unter /Og:

  • Lokale und globale gemeinsame Subexpression Eliminierung

    In dieser Optimierung wird der Wert eines gemeinsamen Unterausdrucks einmal berechnet. Wenn sich die Werte der b c drei Ausdrücke im folgenden Beispiel nicht ändern, kann der Compiler die Berechnung b + c einer temporären Variablen zuweisen und diese Variable für b + cFolgendes verwenden:

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

    Bei der lokalen allgemeinen Subexpression-Optimierung untersucht der Compiler kurze Codeabschnitte für allgemeine Unterausdrücke. Für die globale allgemeine Subexpression-Optimierung durchsucht der Compiler ganze Funktionen nach allgemeinen Unterausdrücke.

  • Automatische Registerzuweisung

    Diese Optimierung ermöglicht es dem Compiler, häufig verwendete Variablen und Unterausdrücke in Registern zu 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 Subexpressionen aus dem Textkörper einer Schleife. Eine optimale Schleife enthält nur Ausdrücke, deren Werte sich durch jede Ausführung der Schleife ändern. Im folgenden Beispiel ändert sich der Ausdruck x + y nicht im Schleifentext:

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

    Nach der Optimierung wird statt x + y bei jeder Ausführung der Schleife einmal berechnet:

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

    Die Schleifenoptimierung ist viel effektiver, wenn der Compiler keine Aliasing annehmen kann, die Sie mit __restrict, oder restrictnoalias.

    Hinweis

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

Verwandte Informationen finden Sie unter /Oi (Generieren systeminterner Funktionen) 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. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Geben Sie die Compileroption im Feld "Zusätzliche Optionen " ein.

So legen Sie diese Compileroption programmgesteuert fest

Siehe auch

Syntax für die MSVC-Compilerbefehlszeile