aus Wikipedia, der freien Enzyklopädie
Wenn man die Optimierung einschaltet, dann verändert der Compiler in der Übersetzung gegebenenfalls den Programmcode. Dann ist es kaum noch möglich, mit einem interaktiven Debugger den Programmcode zu verfolgen.
Die Optimierung erfolgt in Abhängigkeit von den Eigenschaften der Hardware, insbesondere wieviele Register der Prozessor zur Verfügung stellt.
Im Folgenden betrachten wir einige Optimierungsmöglichkeiten eines Compilers. Dabei handelt es sich naturgemäss nur um Feintuning an einem bestehenden Programm. Erheblich mehr Optimierungspotential kann aber darin bestehen, dass man den programmierten Algorithmus (manuell) optimiert bzw. durch einen besseren ersetzt.
| Inhaltsverzeichnis |
Wenn man zum Beispiel in einer höheren Programmiersprache den Inhalt von 2 Variablen vertauscht, dann benötigt man eine Hilfsvariable:
Programmiersprache Assembler
ohne Optimierung mit Optimierung
t = a a --> Register 1 a --> Register 1
Register 1 --> t
a = b b --> Register 2 b --> Register 2
Register 2 --> a
b = t t --> Register 3 Register 1 --> b
Register 3 --> b Register 2 --> a
Mit Optimierung benötigt man nur 4 Assemblerbefehle anstatt 6, außerdem wird der Speicherplatz für die Hilfsvariable t nicht gebraucht. D.h. diese Vertauschung wird schneller ausgeführt und benötigt weniger Hauptspeicher.
Die Berechnung des Kreisumfangs mittels
pi = 3.14
u = 2 * pi * r
optimiert der Compiler zu "u = 6.28 * r". Die Multiplikation "2 * pi" wird während der Übersetzung ausgeführt und reduziert so die Laufzeit.
Wenn der Compiler erkennen kann, dass ein Teil des Programmes niemals durchlaufen wird, dann lässt er diesen Teil bei der Übersetzung weg.
Beispiel: ...
goto 900
200 k=3
900 i=7
...
Wenn in diesem Programm niemals ein GOTO auf das Label 200 erfolgt, dann kann auf die Anweisung "200 k=3" verzichtet werden.
Wird eine Variable nicht benötigt, dann wird sie auch nicht berechnet.
Beispiel: subroutine test (a,b)
b = 2 * a
c = 3.14 * b
return
Hier wird die Variable c nicht benötigt: Sie steht nicht in der Parameterliste, wird in späteren Berechnungen nicht verwendet und wird auch nicht ausgegeben. Deshalb entfällt die Anweisung "c = 3.14 * b".
Insbesondere Schleifen versucht man zu optimieren, indem man
Zusammenhängender Code - z.B. eine Schleife - sollte zur Laufzeit möglichst auf einer Page im Hauptspeicher liegen. Dies kann man evtl. dadurch erreichen, dass man geeignete Leeranweisungen ("NOPs") dem Programmcode hinzufügt. Dadurch wird der Programmcode zwar größer, aber wegen des reduzierten Pagings wird das Programm schneller ausgeführt.
Von "http://de.wikipedia.org/wiki/Compiler"
Diese Seite wurde zuletzt geändert um 04:47, 21. Dez 2003. Diese Seite ist unter der GNU FDL verfügbar.