读书人

dalvik 基于寄存器

发布时间: 2013-01-28 11:49:56 作者: rapoo

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寄存器是映射到物理寄存器还是内存那就是另外一回事了。

读书人网 >移动开发

热点推荐