Computerprogramme sind Anweisungen, die an die Hardware gegeben werden, um Aufgaben auszuführen. Diese Programme sind meistens in Hochsprachen verfasst und der Computer versteht diese Sprache nicht. Daher wird ein Compiler verwendet, um diese Anweisungen in Maschinencode oder Zielcode umzuwandeln. Es durchläuft mehrere Phasen, um den Zielcode zu erstellen. Code-Optimierung ist eine davon. Es gibt zwei Optimierungstechniken wie maschinenabhängige und maschinenunabhängige Codeoptimierung. Das Hauptunterschied Zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung liegt das Die maschinenabhängige Optimierung wird auf den Objektcode angewendet, während die maschinenunabhängige Codeoptimierung auf den Zwischencode angewendet wird.
1. Übersicht und Schlüsseldifferenz
2. Was ist maschinenabhängige Code-Optimierung?
3. Was ist maschinenunabhängige Code-Optimierung?
4. Ähnlichkeiten zwischen maschinenabhängiger und maschinenunabhängiger Code-Optimierung
5. Side-by-Side-Vergleich - Machine Dependent und Machine Independent Code Optimization in tabellarischer Form
6. Zusammenfassung
Beim Konvertieren des Quellcodes in Objektcode oder Zielcode durchläuft der Compiler mehrere Phasen. Zunächst wird der Quellcode dem Lexical Analyzer übergeben, der Token produziert. Dann wird die Ausgabe an einen Syntaxanalysator übergeben, der untersucht, ob die generierten Token in logischer Reihenfolge sind. Diese Ausgabe wird dem semantischen Analysator übergeben. Angenommen, es gibt einen Code als p = q + r;
Hier sind p, q ganze Zahlen, aber r ist ein Float. Mit dem semantischen Analysator wird die Ganzzahlvariable c in einen Float konvertiert. Daher führt es die semantische Analyse durch. Die Ausgabe des semantischen Analysators geht an den Zwischencodegenerator. Es gibt einen Zwischencode zurück, der dann zum Code-Optimierer geht. Bei der Codeoptimierung werden nicht wesentliche Programmanweisungen entfernt, ohne die Bedeutung des tatsächlichen Quellcodes zu ändern. Es ist keine zwingende Optimierung, kann jedoch die Laufzeit des Zielcodes verbessern. Die Ausgabe des Codeoptimierers wird an den Codegenerator übergeben, und schließlich wird der Zielcode erstellt.
Abbildung 01: Phasen des Compilers
Bei der maschinenabhängigen Codeoptimierung wird der Quellcode optimiert. Durch die Zuteilung einer ausreichenden Menge an Ressourcen kann die Ausführung des Programms bei dieser Optimierung verbessert werden.
Wenn die Optimierung des Zwischencodes erfolgt, wird dies als maschinenunabhängige Codeoptimierung bezeichnet. Es gibt verschiedene Techniken, um eine maschinenunabhängige Codeoptimierung zu erreichen. Sie werden anhand der folgenden Beispiele beschrieben.
Lesen Sie die folgenden Codezeilen.
für (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Gemäß dem obigen Code wird in jeder Iteration immer wieder b = x + 2 berechnet. Sobald b berechnet ist, ändert sich nichts. Diese Linie kann also wie folgt außerhalb der Schleife platziert werden.
b = x + 2;
für (j = 0; j< 10; j++)
a [j] = 5 * j;
Dies wird als Codebewegung bezeichnet.
Lesen Sie die folgenden Codezeilen.
j = 5;
wenn (j == 10)
a = b + 20;
Gemäß obigem Code wird 'if block' niemals ausgeführt, da der Wert j niemals 10 sein wird. Er ist bereits mit dem Wert 5 initialisiert. Daher kann dieser if-Block entfernt werden. Diese Technik ist die Beseitigung von totem Code.
Eine andere Methode ist die Verringerung der Festigkeit. Arithmetische Operationen wie die Multiplikation erfordern mehr Speicher, Zeit und CPU-Zyklen. Diese teuren Ausdrücke können durch billige Ausdrücke wie b = a * 2 ersetzt werden. oder kann durch Addition ersetzt werden, b = a + a;
Siehe den Code unten.
für (j = 1; j <= 5; j ++)
Wert = j * 5;
Anstelle der Multiplikation kann der Code wie folgt geändert werden.
int temp = 5;
für (j = 1; j<=5; j++)
Temp = Temp + 5;
Wert = Temp;
Es ist möglich, die zur Laufzeit konstanten Ausdrücke auszuwerten. Es wird genannt Konstante Faltung. Es kann angegeben werden wie b [j + 1] = c [j + 1];
Stattdessen kann es wie folgt geändert werden.
n = j + 1;
b [n] = c [n];
Es können Schleifen wie folgt sein.
für (j = 0; j<5; j++)
printf ("a \ n");
für (j = 0; j <5; j++)
printf ("b \ n");
Wenn Sie a und b drucken, haben beide die gleiche Anzahl von Iterationen. Beide können wie folgt zu einer for-Schleife kombiniert werden.
für (j = 0; j <5; j++)
printf ("a \ n");
printf ("b \ n");
Eine andere wichtige Technik ist die Häufige Unterdrückung von Unterausdrücken. Die identischen Ausdrücke müssen durch eine einzige Variable ersetzt werden, um die Berechnung durchzuführen. Siehe untenstehenden Code.
a = b * c + k;
d = b * c + m;
Dieser Code kann wie folgt konvertiert werden.
Temp = b * c;
a = Temp + k;
d = Temp + m;
Es ist nicht erforderlich, b * c immer wieder zu berechnen. Der multiplizierte Wert kann in einer Variablen gespeichert und erneut verwendet werden.
Maschinenabhängige vs. maschinenunabhängige Code-Optimierung | |
Die maschinenabhängige Codeoptimierung wird auf den Objektcode angewendet. | Die maschinenunabhängige Codeoptimierung wird auf Zwischencode angewendet. |
Beteiligung an Hardware | |
Die maschinenabhängige Optimierung beinhaltet CPU-Register und absolute Speicherreferenzen. | Bei der maschinenunabhängigen Codeoptimierung sind keine CPU-Register oder absolute Speicherreferenzen erforderlich. |
Die Codeoptimierung besteht aus zwei Optimierungstechniken, nämlich der maschinenabhängigen und der maschinenunabhängigen Codeoptimierung. Der Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung besteht darin, dass die maschinenabhängige Optimierung auf Objektcode angewendet wird, während die maschinenunabhängige Codeoptimierung auf Zwischencode angewendet wird.
Sie können die PDF-Version dieses Artikels herunterladen und gemäß dem Zitiervermerk für Offline-Zwecke verwenden. Laden Sie die PDF-Version hier herunter. Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung
1. “Compiler-Design | Code-Optimierung. “GeeksforGeeks. Hier verfügbar
2.Point, Tutorials. „Compiler-Design - Code-Optimierung“. Www.tutorialspoint.com, Tutorials Point, 15. August 2017. Hier verfügbar
3. Studien4you. „JNTUH CSE-Studienmaterial“. Unterschied zwischen maschinenabhängiger und unabhängiger Codeoptimierung. Hier verfügbar
1. "Compiler" Von I Surachit, (CC BY-SA 3.0) über Commons Wikimedia