基于寄存器的虚拟机如何实现寄存器。
我已经阅读了很多有关基于寄存器的虚拟机的在线信息,并且已经int r[16];
将其用作实现寄存器的方法。这就提出了一些问题,例如像这样的机器如何能够处理长形或浮空?
Parrot和Dalvik都是基于寄存器的虚拟机。Parrot声明其具有一个寄存器窗口,该窗口允许无限数量的寄存器,而dalvik支持多达65,536个寄存器。我想知道如何在这些虚拟机上实现寄存器
我想看看实际的实现代码,因为我对它们如何存储不同的值以及它们是在调用操作码时创建还是始终存在的值感兴趣?
谢谢
在dalvik中,每个寄存器均为32位宽。长/双精度值使用2个寄存器存储。实际的寄存器值被“持久化”在调用堆栈中,但可能暂时存在于实际的物理机器寄存器中。
寄存器数量的64k限制是由于保存寄存器数量的dex文件中字段的大小(16位)引起的。实际上,方法不需要那么多寄存器。
如果您想对dalvik的工作方式有更深入的了解,最好的资源就是来源本身。例如,这是“ const”操作码的可移植C实现,它将立即值存储到寄存器中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句