2

基于寄存器的虚拟机如何实现寄存器。

我一直在阅读很多关于基于寄存器的虚拟机的在线信息,并且我已经看到int r[16];用作实现寄存器的方法。这带来了一些问题,比如像这样的机器如何能够处理长或浮点数?

Parrot 和 Dalvik 都是基于寄存器的虚拟机。Parrot 表示它有一个寄存器窗口,允许无限数量的寄存器,dalvik 支持多达 65,536 个寄存器。我想知道寄存器是如何在这些虚拟机上实现的

我想看看实际实现的代码,因为我对它们如何能够存储不同的值以及它们是在调用操作码时创建还是总是在那里感兴趣?

谢谢

4

1 回答 1

2

在 dalvik 中,每个寄存器都是 32 位宽的。使用 2 个寄存器存储 long/double 值。实际的寄存器值“持久化”在调用堆栈中,但可能暂时存在于实际的物理机器寄存器中。

寄存器数量的 64k 限制是由于 dex 文件中保存寄存器数量的字段的大小,即 16 位。实际上,方法只是不需要那么多寄存器。

如果您想更深入地了解 dalvik 的工作原理,最好的资源就是源代码本身。例如,这里是“const”操作码的可移植 C 实现,它将立即值存储到寄存器中。

于 2014-06-04T20:13:30.237 回答