Computerprogramme sind Anweisungen für Hardware, um Aufgaben auszuführen. Diese Programme sind hauptsächlich in Sprachen auf hoher Ebene geschrieben, und der Computer versteht diese Sprache nicht. Daher wird ein Compiler verwendet, um diese Anweisungen in den Maschinencode oder den Zielcode umzuwandeln. Es durchläuft mehrere Phasen, um den Zielcode zu erstellen. Die Codeoptimierung ist eine von ihnen. Es gibt zwei Optimierungstechniken wie maschinenabhängige und maschinenunabhängige Codeoptimierung. Der Schlüsselunterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung ist, dass die Die maschinenabhängige Optimierung wird auf den Objektcode angewendet, während die maschinenunabhängige Codeoptimierung auf den Zwischencode angewendet wird.
1. Überblick und wichtiger Unterschied
2. Was ist maschinenabhängige Codeoptimierung
3. Was ist maschinenunabhängige Codeoptimierung
4. Ähnlichkeiten zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung
5. Seite für Seitenvergleich - maschinenabhängige VS -maschinelle unabhängige Codeoptimierung in tabellarischer Form
6. Zusammenfassung
Beim Konvertieren des Quellcodes in Objektcode oder Zielcode durchläuft der Compiler mehrere Phasen. Erstens wird der Quellcode an den Lexikalanalysator übergeben, der Token produziert. Anschließend wird der Ausgang an den Syntaxanalysator übertragen, der untersucht, ob die generierten Token in logischer Reihenfolge sind. Dieser Ausgang wird dem semantischen Analysator gegeben. Angenommen, es gibt ein Stück Code als p = q + r;
Hier sind P, Q Ganzzahlen, aber R ist ein Schwimmer. Unter Verwendung des semantischen Analysator. Daher wird die semantische Analyse durchgeführt. Die Ausgabe des semantischen Analysators geht an den Zwischencodegenerator. Es gibt einen Zwischencode zurück, der dann zum Code -Optimierer geht. Die Codeoptimierung ist der Prozess der Beseitigung der nicht wichtigen Programmanweisungen, ohne die Bedeutung des tatsächlichen Quellcode zu ändern. Es ist keine obligatorische Optimierung, aber es kann die Laufzeit des Zielcodes verbessern. Die Ausgabe des Code -Optimierers wird dem Codegenerator übergeben, und schließlich wird der Zielcode erstellt.
Abbildung 01: Phasen des Compilers
In der maschinenabhängigen Codeoptimierung wird die Optimierung auf den Quellcode angewendet. Durch die Zuordnung einer ausreichenden Menge an Ressourcen kann die Ausführung des Programms in dieser Optimierung verbessert werden.
Wenn die Optimierung auf dem Zwischencode durchgeführt wird, wird sie als maschinell unabhängige Codeoptimierung bezeichnet. Es gibt verschiedene Techniken zum Erreichen von maschinenunabhängigen Codeoptimierung. Sie werden unter Verwendung folgender Beispiele beschrieben.
Lesen Sie brüde Codezeilen.
für (j = 0; J<10; j ++)
B = x+2;
a [j] = 5* j;
Gemäß dem obigen Code wird B = x+2 in jeder Iteration immer wieder berechnet. Sobald B berechnet ist, ändert es sich nicht. 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 brüde Codezeilen.
J = 5;
if (j == 10)
A = B+20;
Laut dem obigen Code wird "wenn Block" niemals ausgeführt, da J -Wert niemals gleich 10 entspricht. Es wird bereits auf den Wert 5 initialisiert. Daher kann dies, wenn der Block entfernt werden kann. Diese Technik ist Dead Code Elimination.
Eine andere Methode ist die Festigkeitsreduktion. Arithmetische Operationen wie 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;
Verweisen Sie den folgenden Code.
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 Ausdrücke zu bewerten, die zur Laufzeit Konstanten sind. 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 kann Schleifen wie folgt geben.
für (j = 0; J<5; j++)
printf ("a \ n");
für (j = 0; J <5; j++)
printf ("b \ n");
Drucken A und B haben beide die gleiche Anzahl von Iterationen. Beide können wie folgt zu einer für die Schleife kombiniert werden.
für (j = 0; J <5; j++)
printf ("a \ n");
printf ("b \ n");
Eine weitere wichtige Technik ist die Gemeinsame Eliminierung von Sub -Expression. Es soll die identischen Ausdrücke durch eine einzelne Variable ersetzen, um die Berechnung durchzuführen. Verweisen Sie den Bellow -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 wiederverwendet werden.
Maschinenabhängige gegen maschinenunabhängige Codeoptimierung | |
Maschinenabhängige Codeoptimierung wird auf den Objektcode angewendet. | Maschinenunabhängige Codeoptimierung wird auf den Zwischencode angewendet. |
Beteiligung an Hardware | |
Die maschinenabhängige Optimierung umfasst CPU -Register und absolute Speicherreferenzen. | Die maschinenunabhängige Codeoptimierung umfasst keine CPU -Register oder absolute Speicherreferenzen. |
Die Codeoptimierung besteht aus zwei Optimierungstechniken, nämlich maschinenabhängige und maschinenunabhängige Codeoptimierung. Die Differenz zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung besteht darin, dass die maschinenabhängige Optimierung auf den Objektcode angewendet wird, während die maschinenunabhängige Codeoptimierung auf den Zwischencode angewendet wird.
Sie können die PDF -Version dieses Artikels herunterladen und ihn für Offline -Zwecke gemäß Citation Note verwenden. Bitte laden Sie die PDF -Version hier den Unterschied zwischen maschinell abhängiger und maschinenunabhängiger Codeoptimierung herunter
1.„Compiler Design | Codeoptimierung.”Geeksforgeeks. Hier verfügbar
2.Punkt, Tutorials. „Compiler Design - Codeoptimierung.”Www.Tutorialspitze.com, Tutorials Punkt, 15. August. 2017. Hier verfügbar
3.Estudies4you. „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