58 votes

les registres vs piles

Quels sont exactement les avantages et les inconvénients de l'utilisation d'un registre de la machine virtuelle basée sur le rapport à l'aide d'un pile-based virtual machine?

Pour moi, il semble comme si un registre en fonction de la machine serait plus simple à programmer et plus efficace. Alors, pourquoi est-ce que la JVM, le CLR, et le Python de la VM sont tous basée sur la pile?

39voto

Ferruccio Points 51508

Mis en œuvre dans le matériel, un registre de base de la machine pour être plus efficace tout simplement parce qu'il y a de moins en moins accès à la RAM plus lente. Dans le logiciel, cependant, même un registre basé sur une architecture sera très probablement le "registres" dans la mémoire RAM. Une machine à pile va être tout aussi efficace dans ce cas.

En outre, une pile de VM va rendre beaucoup plus facile d'écrire des compilateurs. Vous n'avez pas à traiter avec l'allocation des registres de stratégies. Vous avez, pour l'essentiel, un nombre illimité de registres de travailler avec.

Mise à jour: j'ai écrit cette réponse en supposant une interprétation d'une VM. Il peut ne pas être vrai pour un JIT compilé VM. J'ai couru à travers ce livre qui semble indiquer qu'un JIT compilé VM peut être plus efficace à l'aide d'un registre de l'architecture.

33voto

Joe Pineda Points 2130

Cela a déjà été répondu, à un certain niveau, dans le Parrot VM à la FAQ et les documents connexes: Un Perroquet Aperçu Le texte de cette doc est ceci:

le Parrot VM aura un registre de l'architecture, plutôt qu'une architecture de pile. Il aura également extrêmement faible niveau des opérations, de plus en plus similaire à Java est que le niveau moyen de la fpo de Perl et Python et la comme.

La raison de cette décision est principalement qu'en ressemblant à du matériel sous-jacent, dans une certaine mesure, il est possible de compiler vers le bas Parrot bytecode à l'efficacité de la machine natif de la langue.

En outre, de nombreux programmes dans les langages de haut niveau sont constitués de fonction imbriquée et les appels de méthode, parfois avec lexicale des variables pour stocker les résultats intermédiaires. En vertu de la non-JIT paramètres, une fonction de pile de la machine virtuelle sera popping et puis en poussant les mêmes opérandes de nombreuses fois, tandis qu'un registre VM sera tout simplement allouer la bonne quantité de registres et de les manipuler, ce qui peut réduire considérablement la quantité d'opérations et de temps PROCESSEUR.

Vous pouvez aussi lire ceci: Registres vs piles pour l'interprétation de la conception Citant un peu:

Il n'y a pas de doute réel, il est plus facile de générer du code pour une pile de linge. La plupart des étudiant de première année compilateur les élèves peuvent le faire. Générer du code pour un registre de la machine est un peu plus difficile, sauf si vous êtes de le traiter comme une pile de la machine avec un accumulateur. (Ce qui est faisable, mais un peu moins que l'idéal d'un point de vue des performances) Simplicité de ciblage n'est pas très grave, au moins pas pour moi, en partie parce que peu de gens vont réellement cibler directement, je veux dire, allez, combien de personnes connaissez-vous qui, en fait, d'essayer d'écrire un compilateur pour quelque chose que quelqu'un s'occupe de? Les chiffres sont petits. L'autre problème est que beaucoup de gens avec le compilateur de connaissances sont déjà à l'aise ciblage registre des machines, que c'est ce que tout le matériel, les Processeurs à usage commun sont.

20voto

adesousa Points 111

Traditionnellement, la machine virtuelle réalisateurs ont favorisé la pile à des architectures plus de la fonction de registre en raison de la simplicité de la VM de mise en œuvre de la facilité de l'écriture d'un compilateur back-end - la plupart des ordinateurs virtuels sont à l'origine destinés à l'accueil d'une seule langue et le code de la densité et de fichiers exécutables pour l'architecture de pile sont toujours plus petits que les fichiers exécutables pour enregistrer les architectures. La simplicité et la densité de code sont un coût de la performance.

Des études ont montré qu'un enregistrement de base de l'architecture nécessite une moyenne de 47% de moins exécuté VM instructions de pile, de l'architecture, et le registre de code est 25% plus grande que la pile correspondante code, mais cette augmentation du coût de l'extraction de plus de VM instructions en raison de plus grande taille de code implique seulement 1.07% supplémentaire de la machine réelle des charges par VM instruction qui est négligeable. La performance globale de l'enregistrement de la VM, c'est qu'il prend, en moyenne, de 32,3% de moins de temps pour exécuter des critères standards.

12voto

Mark Bessey Points 13931

L'une des raisons pour la construction de pile, VMs, c'est que le réel VM opérateurs peuvent être plus petits et plus simples (pas besoin d'encoder/décoder des opérandes). Cela rend le code généré plus petits, et fait également de la VM code plus simple.

8voto

Chris Cudmore Points 11133

Combien de registres avez-vous besoin?

Je vais probablement besoin d'au moins un de plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X