Was macht der Compiler in der Assembly, wenn er Code optimiert? dh -O2-Flagge

8

Wenn Sie also beim Kompilieren von C ++ ein Optimierungs-Flag hinzufügen, läuft es schneller, aber wie funktioniert das? Könnte jemand erklären, was wirklich in der Versammlung passiert?

    
kayla 21.11.2013, 02:40
quelle

2 Antworten

13

Es bedeutet, dass Sie den Compiler dazu bringen, während der Kompilierung zusätzliche Arbeit / Analyse zu machen, damit Sie zur Laufzeit einige wertvolle CPU-Zyklen belohnen können. Könnte am besten mit einem Beispiel erklären.

Betrachten Sie eine Schleife wie folgt:

%Vor%

Wenn Sie dies ohne Optimierungen kompilieren, wird der Compiler keine zusätzliche Arbeit für Sie erledigen - die Assembly, die für dieses Code-Snippet generiert wird, ist wahrscheinlich eine wörtliche Übersetzung in Vergleichs- und Sprungbefehle. (Das ist nicht das schnellste, nur das einfachste)

Wenn Sie jedoch WIT-Optimierungen kompilieren, kann der Compiler leicht inline diese Schleife setzen, da er weiß, dass die obere Grenze niemals geändert werden kann, weil n const ist. (d. h. es kann den wiederholten Code 5 mal direkt kopieren, anstatt die Endschleifenbedingung zu vergleichen / zu prüfen).

Hier ist ein weiteres Beispiel mit einem optimierten Funktionsaufruf. Unten ist mein ganzes Programm:

%Vor%

Wenn ich diesen Code ohne Optimierung mit gcc foo.c auf meiner x86-Maschine kompiliere, sieht meine Assembly so aus:

%Vor%

Hier wird nichts optimiert. Es lädt die Register mit meinen konstanten Werten und ruft meine Funktion foo auf. Aber schau, ob ich mit dem -O2 -Flag neu kompiliere:

%Vor%

Der Compiler ist so schlau, dass er nicht einmal foo aufruft. Es zeigt nur den Rückgabewert an.

    
yamafontes 21.11.2013, 02:49
quelle
0

Der größte Teil der Optimierung findet in der Zwischenrepräsentation des Compilers statt, bevor die Assembly generiert wird. Sie sollten sich unbedingt Agner Fogs Software-Optimierungs-Ressourcen ansehen. Kapitel 8 des 1. Handbuchs beschreibt Optimierungen, die der Compiler mit Beispielen durchführt.

    
Gyorgy Szekely 21.11.2013 12:29
quelle

Tags und Links