8

从语义上讲,Dalvik VM 对每个方法都有一组新的寄存器,并且没有访问调用堆栈的指令。但就其实现而言,寄存器应该在方法调用时以某种方式保存,并在方法返回时恢复。Dalvik(谷歌的实现)如何做到这一点?

4

2 回答 2

5

dalvik 字节码所指的寄存器根本不是机器寄存器,但它们实际上是调用堆栈上的位置。每当您调用一个方法时,dalvik 都会在该方法的堆栈帧上分配足够的内存来保存该方法所需的所有寄存器。

请注意,并非所有计算都会立即修改堆栈上的值,vm 显然必须将值加载到机器寄存器中才能进行计算。结果可以保存在机器寄存器中以供以后使用,而无需立即将其写回相应的堆栈位置,由 VM 自行决定。如果需要,这些值将被刷新回调用堆栈(即当您调用另一个方法时,使用各种同步构造,或者它需要寄存器进行另一个计算等)。

于 2012-01-04T03:47:26.737 回答
1

这是 dalvik 的源代码库,您可以通过演练来找出实现。安卓源码

于 2012-01-04T03:41:11.200 回答