Avantages des bytecodes basés sur des piles ou des machines à registre infini

compiler-construction expression-trees intermediate-code

Question

Les compilateurs choisissent souvent des représentations intermédiaires (IR) qui sont des registres à pile ou infinis. Quels sont les avantages de ces arbres plus d'expression?

Réponse populaire

Les arbres d'expression fonctionnent pour les expressions, mais ne sont pas efficaces pour modéliser l'ensemble du programme. En particulier, une bonne représentation d'un programme est en réalité un graphe (d'opérations et d'actions) connecté par des flux de contrôle et de données. Habituellement, les gens parlent d'utiliser des "triples" qui forment exactement un tel graphique.

Le code machine de pile est facile à générer pour le serveur frontal, mais plus difficile pour le processus d'allocation de registre nécessaire à la génération de code réel, car il possède un ensemble d'emplacements temporaires ("la pile") qui n'ont rien à voir avec l'architecture cible. et rendre les flux de données incommodes à traiter. ("quel code utilise le résultat de cet ajout?").

Les machines à registre sont un peu plus difficiles à générer du code, mais ont tendance à préserver le flux de données en utilisant ces registres infinis comme des fils de flux de données. Ce flux de données et la possibilité de l’allouer facilement à des registres réels (il existe une allocation de registre standard "par coloration de graphe") facilite relativement la génération de code.

Si vous décidez de générer du code de machine virtuelle directement à partir de ceux-ci, vous obtenez différentes caractéristiques de performance. Essentiellement, les machines à pile ont tendance à avoir des empreintes de code plus petites. Les machines à registre infinies ont tendance à avoir une exécution interprétative rapide. Dalvik de Google est différent de la machine virtuelle pour cette raison. (Peut-être qu'ils ne voulaient pas être poursuivis en justice par Sun / Oracle pour les formats de fichier de classe, également.)

Je suggère le document suivant: Virtual Machine Showdown: Stack Versus Registers . (PS: n'importe quoi avec Anton Ertl en tant qu'auteur a tendance à être une lecture intéressante).



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow