Dalvik VM 如何在方法调用之间保存和恢复其寄存器?

发布于 2024-12-25 06:26:13 字数 119 浏览 2 评论 0原文

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

Semantically, the Dalvik VM has a fresh set of registers for each method, and does not have instructions to access the call stack. But in terms of its implementation, the registers should be saved somehow on method calls and restored on method returns. How does the (Google's implementation of) Dalvik do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ㄖ落Θ余辉 2025-01-01 06:26:13

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

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

The registers that dalvik bytecode refers to are not machine registers at all, but they are actually locations on the call stack. Whenever you call into a method, dalvik allocates enough memory on that method's stack frame to hold all the registers that that method needs.

Note that not all calculations will modify the value on the stack immediately, the vm obviously has to load the values into a machine register in order to do the calculations. The results may be kept in a machine register to be used later without immediately writing it back to the corresponding stack location, at the discretion of the VM. The values will be flushed back to the call stack if and when it is needed (i.e. when you call into another method, use various sync constructs, or it needs the register for another calculation, etc.).

似梦非梦 2025-01-01 06:26:13

这是 dalvik 的源代码存储库,您可以逐步了解实现。 Android 源

Here is source repository for dalvik, you may walkthrough to findout implementation. android source

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文