从语义上讲,Dalvik VM为每种方法都有一套全新的寄存器,并且没有指令来访问调用堆栈。但就其实现而言,寄存器应以方法调用方式保存,并在方法返回时恢复。 (谷歌实施)Dalvik如何做到这一点?Dalvik VM如何在方法调用之间保存和恢复其寄存器?
6
A
回答
1
这里是Dalvik的源代码库,你可以演练,以findout实施。 android source
3
说的Dalvik字节码的寄存器指的是不是机器寄存器可言,但它们实际上是调用堆栈上的位置。无论何时调用方法,dalvik都会在该方法的堆栈帧上分配足够的内存,以容纳该方法所需的所有寄存器。
请注意,并非所有的计算将立即修改堆栈上的值,虚拟机显然有加载为了做计算的值到机器寄存器。结果可以保存在一个机器寄存器中,稍后可以使用,而不必立即写回到相应的堆栈位置,由虚拟机决定。如果需要时(即当你调用另一个方法,使用各种同步结构,或者它需要寄存器进行另一次计算等),这些值将被刷新回调用堆栈。
相关问题
- 1. 程序集如何保存和恢复寄存器
- 2. GRAILSUI Datatable - 调用之间的保存和恢复状态
- 3. 恢复用户堆栈/寄存器
- 4. 在MIPS中恢复寄存器
- 5. 在<C-r>函数调用后恢复寄存器
- 6. 强制函数在进行函数调用之前恢复所有寄存器
- 7. 如何设置和恢复FPU CTRL寄存器?
- 8. 调试Dalvik VM
- 9. 的Android onSavedInstanceState保存和恢复时间
- 10. 如何保存寄存器VIM
- 11. 如何保存和恢复表单?
- 12. 如何保存和恢复PyBrain培训?
- 13. 保存和恢复CGContext
- 14. 画布保存和恢复
- 15. 保存和恢复队列管理器
- 16. 如何在LLVM中保留寄存器?
- 17. 寄存器方法faulthandler
- 18. Dalvik VM调用问题
- 19. 如何保存/恢复程序运行之间的窗体和控件?
- 20. 什么是被调用者和调用者保存的寄存器?
- 21. intel 80386在哪里保存寄存器?
- 22. 保存和恢复使用tensorflow
- 23. 在MacOs上保存和恢复状态
- 24. 在Daemon上保存和恢复布局
- 25. MIPS系统调用和$ t寄存器
- 26. 如何在XMM寄存器之间移动128位值?
- 27. 删除在状态保存和恢复期间保存的数据
- 28. 在服务器上保存信息并将其恢复
- 29. ARM to C调用约定,NEON寄存器保存
- 30. 如何在应用程序之间备份和恢复数据存储
是否可以访问Google Dalvik实现的源代码?还要注意,* Dalvik字节码*不能访问“调用栈”和*执行*之间存在差异,该执行*执行的这种字节码没有这种访问权限。 (它*必须*有一些维护状态的方法,将方法调用的契约视为一个开始;-) – 2012-01-04 03:24:16
当方法被输入时,它只是将前一个上下文推入其内部调用堆栈,并在退出方法时将其弹出。 – 2012-01-04 03:34:05
@pst:Android是开源的,当然源代码可以访问:) – JesusFreke 2012-01-04 03:40:23