Bedeutung von gcc-O2

Lesezeit: 4 Minuten

Ich sehe dieses Flag häufig in den Makefiles. Was bedeutet es und wann sollte es verwendet werden?

Optimierungsstufe 2.

Aus der GCC-Manpage:

-O1 Optimieren. Das Optimieren der Kompilierung benötigt etwas mehr Zeit und viel mehr Speicher für eine große Funktion.

-O2 Noch mehr optimieren. GCC führt fast alle unterstützten Optimierungen durch, die keinen Kompromiss zwischen Speicherplatz und Geschwindigkeit beinhalten. Der Compiler führt kein Loop-Unrolling oder Function-Inlining durch, wenn Sie -O2 angeben. Im Vergleich zu -O erhöht diese Option sowohl die Kompilierungszeit als auch die Leistung des generierten Codes.

-O3 Noch mehr optimieren. -O3 schaltet alle von -O2 spezifizierten Optimierungen ein und schaltet auch die Optionen -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload und -ftree-vectorize ein.

-O0 Reduzieren Sie die Kompilierzeit und sorgen Sie dafür, dass das Debugging die erwarteten Ergebnisse liefert. Dies ist die Standardeinstellung.

-Os Auf Größe optimieren. -Os aktiviert alle -O2-Optimierungen, die normalerweise die Codegröße nicht erhöhen. Es führt auch weitere Optimierungen durch, um die Codegröße zu reduzieren.

Benutzer-Avatar
vartec

Optimierungsstufe 2, max ist 3. Siehe: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Beachten Sie, dass in ein paar Jahren -O3 könnte einige Störungen verursachen, indem der Code übermäßig “optimiert” wird. AFAIK, das stimmt bei modernen Versionen von GCC nicht mehr. Aber mit Trägheit, -O2 gilt als “der sicherste”.

Dies ist ein Optimierungsschalter. Siehe gcc –help.

Benutzer-Avatar
Wadih M.

Compiler können verschiedene Optimierungstechniken wie Loop Unrolling, CPU-Pipeline-Optimierungen verwenden, um nutzlosen Code zu finden und Datenrisiken zu vermeiden, um Ihren Code zu beschleunigen. Beispielsweise wird eine Schleife, die eine festgelegte Anzahl von Malen auftritt, ohne den Overhead der Schleifensteuerung in zusammenhängenden Code konvertiert. Oder wenn alle Schleifeniterationen unabhängig sind, ist eine gewisse Codeparallelisierung möglich.

Das Setzen der Optimierungsstufe auf 2 gibt an, wie viel Energie der Compiler für die Suche nach diesen Optimierungen aufwenden sollte. Die möglichen Werte reichen von 1 bis 3

Sie können mehr darüber erfahren, was der Compiler tun kann, um Ihren Code zu optimieren: http://en.wikipedia.org/wiki/Compiler_optimization

Benutzer-Avatar
Mekk

Gemäß der Mann Seite:

-O2 Noch mehr optimieren. GCC führt fast alle unterstützten Optimierungen durch, die keinen Kompromiss zwischen Speicherplatz und Geschwindigkeit beinhalten. Der Compiler führt kein Loop-Unrolling oder Function-Inlining durch, wenn Sie -O2 angeben. Im Vergleich zu -O erhöht diese Option sowohl die Kompilierungszeit als auch die Leistung des generierten Codes.

Mit menschlichen Worten: Es ist die höchste wirklich sichere Art der Optimierung. -O3 führt Umstrukturierungen durch, die manchmal lästig sein können. Das Thema als solches ist ziemlich tief.

Benutzer-Avatar
Ryuzaki

Ohne jede Optimierungsoption besteht das Ziel des Compilers darin, die Kompilierungskosten zu reduzieren und das Debuggen zu den erwarteten Ergebnissen zu führen. Wenn Sie die Optimierung aktivieren, versucht der Compiler, die Leistung und/oder die Codegröße auf Kosten der Kompilierungszeit und möglicherweise der Fähigkeit zum Debuggen des Programms zu verbessern.

Die Standardeinstellung ist Optimierung aus. Dies führt zu der schnellsten Kompilierzeit, aber der Compiler unternimmt absolut keinen Optimierungsversuch, und die generierten Programme sind erheblich größer und langsamer als bei aktivierter Optimierung. Es gibt verschiedene -O-Schalter (die zulässigen Formen sind -O0, -O1, -O2, -O3 und -Os) in gcc, um die Optimierungsstufe zu steuern:

-O0 Keine Optimierung; generiert nicht optimierten Code, hat aber die schnellste Kompilierungszeit. Dies ist Standard.

-O1 Moderate Optimierung; Optimiert ziemlich gut, verschlechtert aber die Kompilierzeit nicht wesentlich. Es braucht viel mehr Speicher für große Funktionen.

-O2 GCC führt fast alle unterstützten Optimierungen durch, die keinen Kompromiss zwischen Speicherplatz und Geschwindigkeit beinhalten. Der Compiler führt kein Loop-Unrolling oder Function-Inlining durch, wenn Sie dies angeben

-O3 Vollständige Optimierung wie in -O2; verwendet auch ein aggressiveres automatisches Inlining von Unterprogrammen innerhalb einer Einheit und versucht, Schleifen zu vektorisieren. Es schaltet auch die Optionen -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload und -ftree-vectorize ein.

-Os Auf Größe optimieren. -Os aktiviert alle -O2-Optimierungen, die normalerweise die Codegröße nicht erhöhen. Es führt auch weitere Optimierungen durch, um die Codegröße zu reduzieren.

Um mehr über Flags/Optionen zu erfahren, die auf verschiedenen Optimierungsebenen verwendet werden, und deren Details:
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

1225830cookie-checkBedeutung von gcc-O2

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy