dalvik 基于寄存器?
dalvik 基于寄存器?
从函数调用的角度看
恕我见识浅薄,我接触到的几种实际系统的函数调用都是用栈的方式来实现的。
有以下几点
1 CPU指令集本身提供了压栈,出栈指令。
2 编译器在编译的时候组织这些栈操作指令,结合跳转指令来实现函数的调用。
3 每个线程都有自己独立的栈,甚至不同的模式下也有不同的栈。
dalvik 本身就是模拟一个实际的系统,也有函数调用,
因此每个java线程也有一个java Frame的空间,
dalvik中的所谓的java线程 就是一个普通的os线程扮演着一个java interpreter的角色。
作为一个普通的os线程,本身拥有os给予的栈。
作为一个java interpreter,拥有一个独立的java 栈。在其中进行解释执行的dalvik 字节码 操作的是java 栈。
注意 此栈非彼栈。
有趣的是dalvik 字节码指令集中没有提供栈操作指令,反而提供了更高级别的指令 invoke,return等。
从dex code的层次来,的确清爽了很多,代码也就更节省。
真正的栈操作都集成到invoke,return 等指令中。
从函数调用的角度来看,dalvik 与真实系统类似,还是都是基于栈的。
另外整个dalvik指令的操作数只有"寄存器"和立即数,所以说其的指令集基于寄存器,这个描述没有问题。
一旦脱离了这个语境,就不合适了。
至于dalvik寄存器是映射到物理寄存器还是内存那就是另外一回事了。