基于栈和寄存器的指令集对比

在学习Java的时候我们知道,Java是基于栈的字节码解释执行,而很多PC的都是基于寄存器来执行的,那么这两种有什么差别呢?

基于栈的解释执行

我们以执行1+1为例。Java的相关指令为:

iconst_1 // 将常量1压入操作数栈
iconst_1 // 将常量1压入操作数栈
iadd //将操作数栈顶的两个数相加后放入栈顶
istore_0 //将栈顶的值放入局部变量表的第0个slot

在Java虚拟机中,每个方法的执行都对应一个栈帧,而每个栈帧中包含局部变量表、操作数栈、动态链接(方法动态分派相关)、方法返回值等模块,其均基于内存访问实现。

基于寄存器的执行

而基于寄存器的1+1实现:

mov eax, 1 //将eax寄存器的值设为1
add eax, 1 //将eax的值加1,结果保存在eax寄存器中

上述直接操作寄存器,和机器硬件实现相关,所以需要了解并适配不同硬件

对比

优点缺点
基于栈移植性好执行速率相对慢一些(栈实现会多次访问内存,且指令较多,内存访问速度瓶颈限制执行速度)
基于寄存器指令更简洁、执行效率更高移植性不好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值