3 Stimmen

Im VC ++, was ist das #pragma-Äquivalent der /O2-Compileroption (Optimierung für Geschwindigkeit)

Laut msdn,

/O2 (Maximize Speed)

ist äquivalent zu

/Og/Oi/Ot/Oy/Ob2/Gs/GF/Gy

und gemäß msdn wiederum, verwendet das folgende pragma

pragma optimize( "[optimization-list]", {on | off} )

die gleichen Buchstaben in der "optimization-list" wie die /O Compiler-Option. Die verfügbaren Buchstaben für das pragma sind:

  • g - Globaloptimierungen aktivieren.
  • p - Konsistenz von Fließkommazahlen verbessern.
  • s oder t - Kurze oder schnelle Sequenzen von Maschinencode angeben.
  • y - Framezeiger auf dem Programmpuffer generieren.

Welche davon sollte ich verwenden, um die gleiche Bedeutung wie /O2 zu haben?

3voto

bosmacs Punkte 7149

Der Microsoft Docs-Artikel /O1, /O2 (Größe minimieren, Geschwindigkeit maximieren) besagt für Visual Studio 2017:

Die Compiler-Optionen /O1 und /O2 sind ein schneller Weg, um mehrere spezifische Optimierungsoptionen auf einmal festzulegen. Die Option /O1 setzt die einzelnen Optimierungsoptionen, die in den meisten Fällen den kleinsten Code erstellen. Die Option /O2 setzt die Optionen, die in den meisten Fällen den schnellsten Code erstellen. Die Option /O2 ist die Standardeinstellung für Release-Builds. Diese Tabelle zeigt die spezifischen Optionen, die von /O1 und /O2 gesetzt werden:

Option                   Äquivalent zu
/O1 (Größe minimieren)     /Og /Os /Oy /Ob2 /GF /Gy
/O2 (Geschwindigkeit maximieren)    /Og /Oi /Ot /Oy /Ob2 /GF /Gy

Aus dem Microsoft Docs-Artikel /O-Optionen (Code optimieren):

  1. /Og aktiviert globale Optimierungen
  2. /Oi erzeugt intrinsische Funktionen für entsprechende Funktionsaufrufe.
  3. /Ot (eine Standardeinstellung) weist den Compiler an, Optimierungen zugunsten der Geschwindigkeit vor Optimierungen zugunsten der Größe zu bevorzugen.
  4. /Oy unterdrückt die Erstellung von Rahmenzeigern im Aufrufstapel für schnellere Funktionsaufrufe.
  5. /Ob2 erweitert Funktionen, die als inline oder __inline markiert sind, und jede andere Funktion, die der Compiler wählt

Die /G-Optionen sind:

  1. /GF (Doppelte Zeichenfolgen eleminieren)
  2. /Gy (Funktionsweises Verlinken aktivieren)

Die /G-Optionen sind nicht strikt Optimierungen, also bleiben uns /Og und /Ot, plus #pragma intrinsic (für Punkt 2 in der Liste), #pragma auto_inline (für Punkt 5 in der Liste) und möglicherweise #pragma inline_depth. Siehe Microsoft Docs-Artikelem Optimierungs-Pragmas und Schlüsselwörter

Siehe auch Microsoft Docs-Artikel /Ox (Aktiviere die meisten Geschwindigkeitsoptimierungen), der darauf hinweist, dass die Option /Ox ähnlich wie die Option /O2/GF oder /Gy aktiviert. Siehe auch Was ist der Unterschied zwischen den Compiler-Optionen /Ox und /O2?

Der Microsoft Docs-Artikel Compiler-Optionen nach Kategorie aufgelistet enthält eine Liste von Compiler-Optionen mit Links, was sie bedeuten.

0voto

Julian Punkte 1490

Ich glaube nicht, dass es ein direktes Äquivalent gibt.

pragma optimise("gty", aus)

Sollte für eine Datei einen Großteil der Wirkung von /O2 auf Projektebene aufheben, aber

pragma optimise("gty", an)

Sagt nur "verwende den Compiler-Schalter", also benötigen Sie /O2 oder /Og /Ot /Oy.

Ich kann keine Pragmas für die /G-Teile finden und sie führen 'ähnliche' Optimierungen durch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X