C++-Compiler Optimierungen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler


Projekt > Optionen > C++-Compiler > Optimierungen

Verwenden Sie dieses Dialogfeld, um Optimierungsoptionen des C++-Compilers festzulegen.

Optionen Beschreibung

Ziel, Übernehmen, Speichern

Siehe Optionen für das Ziel.

Gemeinsame Elemente

Siehe Gemeinsame Elemente auf den Projektoptionsseiten.


Optimierungsoptionen Beschreibung Compiler-Optionen
bcc32 bcc32c bcc64 bccosx bcciosarm bcciosarm64 bccaarm

Alle Optimierungen deaktivieren

Deaktiviert alle Optimierungseinstellungen, einschließlich derjenigen, die Sie ausdrücklich eingestellt haben und derjenigen, die normalerweise als Teil des Geschwindigkeits-/Größekompromisses ausgeführt werden. Weil dadurch Kompaktheits- und Querverweisoptimierungen verhindert werden, kann diese Option den Debugger davon abhalten, zu springen oder aus einer Funktion ohne Warnung zurückzukehren. Dadurch wird das schrittweise Abarbeiten des Codes erleichtert. Vorgabe = True

-Od

-O0

-O0

-Od

-O0

-O0

-O0

Ausgewählte Optimierungen aktivieren

Aktiviert nur die Optimierungen, die Sie aus der Liste der Optimierungen auswählen. Vorgabe = False

Entfernung des toten Speichers
(-Ob)

Entfernt überflüssige Speicherungen. Klicken Sie auf den nach unten weisenden Pfeil, um einen Wert (True, False) auszuwählen. Vorgabe = False

Doppelte Ausdrücke in Blöcken und Funktionen entfernen
(-Oc)

Weist den Compiler an, allgemeine Unterausdrücke in Anweisungsgruppen zu entfernen, die nicht durch Sprünge (Basisblöcke) und Funktionen unterbrochen sind. Diese Option entfernt global doppelte Ausdrücke im Zielgültigkeitsbereich und speichert den berechneten Wert dieser Ausdrücke einmal (anstatt den Ausdruck erneut zu berechnen). Verwenden Sie diese Option, wenn Sie Ausdrücke wiederverwenden möchten, anstatt explizite Stack-Positionen für sie zu erstellen. Vorgabe = False

Schleifeninduktionsvariable und Stärkereduktion aktivieren
(-Ov)

Weist den Compiler an, Induktionsvariablen zu erstellen und eine Stärkereduktion durchzuführen, was die Schleifengeschwindigkeit optimiert. Verwenden Sie diese Option, wenn Geschwindigkeit für Sie maßgeblich ist, und Ihr Quelltext Schleifen enthält.

Mittels Induktion werden neue Variablen (Induktionsvariablen) aus in Schleifen verwendeten Ausdrücken erstellt. Die mit diesen neuen Variablen durchgeführten Operationen benötigen weniger Rechenzeit (stärkereduziert) als jene, die von den ursprünglichen Variablen verwendet werden.

Optimierungen werden üblicherweise bei der Indizierung von Arrays in Schleifen verwendet, weil zur Berechnung der Position in dem Array, das durch den Index angegeben ist, eine Multiplikation erforderlich ist. Beispielsweise wird im folgenden Code eine Induktionsvariable aus der Operation v[i] erstellt, weil für diese Operation eine Multiplikation erforderlich ist. Durch diese Optimierung muss der Wert von i auch nicht gespeichert werden:

int v[10];
void f(int x, int y, int z)
{ int i;
  for (i = 0; i < 10; i++)
    v[i] = x * y * z;
}

Mit Induktionsvariablen ändert sich der Code folgendermaßen:

int v[10];
void f(int x, int y, int z)
{ int i, *p;
  for (p = v; p < &v[9]; p++)
  *p = x * y * z;
}

Vorgabe = False

Pentium-Befehlsplan aktivieren
(-5)

Erzeugt Pentium-Instruktionen. Diese Option erhöht zwar die Ausführungsgeschwindigkeit auf Pentium-Rechnern, kann die Größe des Programms allerdings etwas erhöhen, wenn dieses mit den Optionen 80386 oder i486 compiliert wurde. Ferner ist bei für Pentium compiliertem Code mit einer Performance-Einbuße auf nicht-Pentium-Systemen zu rechnen. Vorgabe = False

Allgemeine intrinsische Funktionen erweitern
(-Oi)

Weist den Compiler an, Code für gebräuchliche Speicherfunktionen, wie strcpy(), im Gültigkeitsbereich Ihrer Funktion zu erzeugen. Dadurch ist ein Funktionsaufruf nicht mehr nötig. Der resultierende Code wird schneller ausgeführt, ist aber größer. Mit dieser Option wird für die folgenden Funktionen ein Inlining durchgeführt:

alloca, fabs, memchr, memcmp, memcpy, memset, rotl, rotr, stpcpy, strcat, strchr, strcmp, strcpy, strlen, strncat, strncmp, strncpy, strnset, strrchr.

Sie können das Inlining dieser Funktionen mit pragma intrinsic steuern. Beispielsweise veranlasst

#pragma intrinsic strcpy

den Compiler, Inline-Code für alle folgenden Aufrufe von strcpy in Ihrer Funktion zu erzeugen, und

#pragma intrinsic -strcpy

verhindert, dass der Compiler für strcpy ein Inlining durchführt. Durch die Verwendung dieser Pragmata in einer Datei werden alle Compiler-Einstellungen überschrieben.
Vorgabe = False

Sprünge optimieren
(-O)

Weist den Compiler an, die Größe des Codes zu reduzieren, indem redundante Sprünge entfernt sowie Schleifen und switch-Anweisungen neu organisiert werden. Wenn diese Option aktiviert ist, kann das schrittweise Abarbeiten des Codes im Debugger wegen der Neuanordnung und Eliminierung von Anweisungen verwirrend sein. Wenn Sie auf Assembly-Ebene debuggen, sollten Sie diese Option gegebenenfalls deaktivieren. Vorgabe = False

Registervariablen verwenden
(-r)

Weist den Compiler an, automatisch Registervariablen zuzuweisen, wenn möglich, auch wenn Sie das Schlüsselwort register nicht angeben. Vorgabe = False

Entfernung des toten Speichers
-Ob

Doppelte Ausdrücke in Blöcken und Funktionen entfernen
-Oc

Schleifeninduktionsvariable und Stärkereduktion aktivieren
-Ov

Pentium-Befehlsplan aktivieren
-5

Allgemeine intrinsische Funktionen erweitern
-Oi

Sprünge optimieren
-O

Registervariablen verwenden
-r

Plattform nicht unterstützt


Plattform nicht unterstützt




Plattform nicht unterstützt




Plattform nicht unterstützt



Plattform nicht unterstützt


Plattform nicht unterstützt

Plattform nicht unterstützt

Plattform nicht unterstützt


Plattform nicht unterstützt




Plattform nicht unterstützt




Plattform nicht unterstützt



Plattform nicht unterstützt


Plattform nicht unterstützt

Plattform nicht unterstützt

Entfernung des toten Speichers
-Ob

Doppelte Ausdrücke in Blöcken und Funktionen entfernen
-Oc

Schleifeninduktionsvariable und Stärkereduktion aktivieren
-Ov

Pentium-Befehlsplan aktivieren
-5

Allgemeine intrinsische Funktionen erweitern
-Oi

Sprünge optimieren
-O

Registervariablen verwenden
-r

Plattform nicht unterstützt


Plattform nicht unterstützt




Plattform nicht unterstützt




Plattform nicht unterstützt



Plattform nicht unterstützt


Plattform nicht unterstützt

Plattform nicht unterstützt

Plattform nicht unterstützt


Plattform nicht unterstützt




Plattform nicht unterstützt




Plattform nicht unterstützt



Plattform nicht unterstützt


Plattform nicht unterstützt

Plattform nicht unterstützt

Plattform nicht unterstützt


Plattform nicht unterstützt




Plattform nicht unterstützt




Plattform nicht unterstützt



Plattform nicht unterstützt


Plattform nicht unterstützt

Plattform nicht unterstützt

Schnellstmöglichen Quelltext erzeugen

Setzt Optimierungsoptionen, die den Compiler dazu veranlassen, den Code hinsichtlich der Geschwindigkeit zu optimieren. Entweder diese Option oder Kleinstmöglichen Quelltext erzeugen muss True sein. Diese beiden Optionen schließen sich gegenseitig aus. Vorgabe = False

-O2

-O2

-O2

-O2

-O2

-O2

-O2

Kleinstmöglichen Quelltext erzeugen

Setzt Optimierungsoptionen, die den Compiler dazu veranlassen, den Code hinsichtlich der Größe zu optimieren. Zum Beispiel durchsucht der Compiler den erzeugten Code nach doppelten Sequenzen. Wenn solche Sequenzen gefunden werden, ersetzt der Optimierungsvorgang eine Codesequenz durch einen Sprung auf die andere Sequenz und löscht den ersten Code-Teil. Dies ist häufig bei switch-Anweisungen der Fall. Der Compiler führt die Optimierung nach der Größe durch, indem er die kleinstmögliche Codesequenz auswählt. Entweder diese Option oder Schnellstmöglichen Quelltext erzeugen muss True sein. Diese beiden Optionen schließen sich gegenseitig aus. Vorgabe = False

-O1

-Os

-Os

-O1

-Os

-Os

-Os

Siehe auch