Was sind die Hauptunterschiede zwischen einer registerbasierten VM und einer stackbasierten VM?

9

Heute habe ich einige Folien über Andoird Grundlagen gelesen und der Satz erschien:

>
  

Dalvik VM ist registerbasiert anstatt stapelbasiert.

Also, Was sind die Hauptunterschiede zwischen einer registerbasierten VM und einer stackbasierten VM?

Der zweite Link hat meine Frage ausreichend beantwortet:

Ссылка

Ein weiterer Link:

Ссылка

    
Alfergon 12.10.2012, 11:42
quelle

1 Antwort

2

Dieser Artikel ist auch ziemlich informativ: Ссылка

"Stackbasierte virtuelle Maschinen Eine stack-basierte virtuelle Maschine implementiert die allgemeinen Merkmale, die in den obigen Punkten von einer virtuellen Maschine beschrieben werden, aber die Speicherstruktur, in der die Operanden gespeichert sind, ist eine Stapel-Datenstruktur. Operationen werden ausgeführt, indem Daten aus dem Stapel entnommen, verarbeitet und die Ergebnisse in LIFO-Form (Last in First Out) zurückgegeben werden. In einer stapelbasierten virtuellen Maschine würde die Operation des Hinzufügens von zwei Zahlen normalerweise auf folgende Weise ausgeführt werden (wobei 20, 7 und 'Ergebnis' die Operanden sind):

stackAdd

POP 20 POP 7 ADD 20, 7, Ergebnis PUSH Ergebnis Wegen der PUSH- und POP-Operationen werden vier Anweisungszeilen benötigt, um eine Additionsoperation auszuführen. Ein Vorteil des Stack-basierten Modells ist, dass die Operanden implizit vom Stack-Pointer adressiert werden (SP im obigen Bild). Dies bedeutet, dass die virtuelle Maschine die Operandenadressen nicht explizit kennen muss, da das Aufrufen des Stapelzeigers den nächsten Operanden ergibt (Pop). In stackbasierten VMs werden alle arithmetischen und logischen Operationen durch Drücken und Aufrufen der Operanden und des Ergebnisses im Stapel ausgeführt.

Registerbasierte virtuelle Maschinen Bei der registerbasierten Implementierung einer virtuellen Maschine basiert die Datenstruktur, in der die Operanden gespeichert sind, auf den Registern der CPU. Es gibt hier keine PUSH- oder POP-Operationen, aber die Anweisungen müssen die Adressen (die Register) der Operanden enthalten. Das heißt, die Operanden für die Anweisungen werden im Gegensatz zu dem stackbasierten Modell, in dem wir einen Stapelzeiger hatten, um auf den Operanden zu zeigen, explizit in dem Befehl adressiert. Wenn beispielsweise eine Additionsoperation in einer registerbasierten virtuellen Maschine ausgeführt werden soll, wäre der Befehl mehr oder weniger wie folgt:

registerAdd

HINZUFÜGEN R1, R2, R3; # Fügen Sie den Inhalt von R1 und R2 hinzu, speichern Sie das Ergebnis in R3 Wie ich bereits erwähnt habe, gibt es keine POP- oder PUSH-Operationen, daher ist die Anweisung zum Hinzufügen nur eine Zeile. Aber im Gegensatz zum Stack müssen wir die Adressen der Operanden explizit als R1, R2 und R3 angeben. Der Vorteil hier ist, dass der Overhead des Hinauf- und Herausspringens aus einem Stapel nicht existent ist und Befehle in einer registerbasierten VM schneller innerhalb der Befehlsabfertigungsschleife ausgeführt werden.

Ein weiterer Vorteil des registerbasierten Modells besteht darin, dass es einige Optimierungen ermöglicht, die im Stack-basierten Ansatz nicht möglich sind. Ein solches Beispiel ist, wenn es im Code gemeinsame Unterausdrücke gibt, kann das Registermodell es einmal berechnen und das Ergebnis für zukünftige Verwendung in einem Register speichern, wenn der Unterausdruck wieder auftaucht, was die Kosten der Neuberechnung des Ausdrucks reduziert. p>

Das Problem mit einem registerbasierten Modell ist, dass der durchschnittliche Registerbefehl größer als ein durchschnittlicher Stapelbefehl ist, da wir die Operandenadressen explizit angeben müssen. Während die Anweisungen für eine Stapelmaschine aufgrund des Stapelzeigers kurz sind, müssen die jeweiligen Registermaschinenbefehle Operandenstellen enthalten und ergeben einen größeren Registercode im Vergleich zum Stapelcode.

Ein toller Blog-Artikel, über den ich (unter diesem Link) gestolpert bin, enthält eine erklärende und einfache C-Implementierung einer registerbasierten virtuellen Maschine. Wenn die Implementierung von virtuellen Maschinen und Dolmetschern Ihr Hauptinteresse ist, könnte das Buch von ANTLR Schöpfer Terrence Parr mit dem Titel 'Language Implementation Patterns: Erstellen Sie Ihre eigenen domänenspezifischen und allgemeinen Programmiersprachen' sehr nützlich sein. "

    
jesse34212 12.01.2015, 01:17
quelle

Tags und Links