C++-Compiler Optimierungen

Aus RAD Studio (Deutsch)
Wechseln zu: Navigation, Suche

Nach oben zu C++-Compiler - Index

Projekt > Optionen > C++-Compiler > Optimierungen

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

Optionen Beschreibung

Build-Konfigurationsoptionen

Werden im Thema Build-Konfigurationsoptionen beschrieben.

Gemeinsame Optionen

Werden im Thema Gemeinsame Elemente auf den Projektoptionsseiten beschrieben.


Optimierungsoptionen Beschreibung

Alle Optimierungen deaktivieren
(-Od)*

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

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

Schnellstmöglichen Quelltext erzeugen
(-O2)

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

Kleinstmöglichen Quelltext erzeugen
(-O1)

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 = True


Allgemeine Option Beschreibung

Standard für neue Projekte

Speichert die aktuellen Einstellungen als Standardeinstellungen für neue Projekte.

In anderen Sprachen