为了账号安全,请及时绑定邮箱和手机立即绑定

关于IL中Dup指令的疑问

关于IL中Dup指令的疑问

翻阅古今 2018-12-13 04:01:02
看了IL手册,手册对Dup的解释为:复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上。如果堆栈上有一个数,顶层为1,执行Dup指令后会发生什么?IL_0001:    ldloc.0    // 将局部变量表的值5推送到计算堆栈,此时计算堆栈最顶端的值为5IL_0002     dup      // 按手册意思,将5的副本再次推送到堆栈,那岂不是说此时堆栈有两个5?IL_0003:    ldc.i4.1    // 将整型数1推送到堆栈IL_0004:    add    // 执行加操作,  5 + 1 = 6IL_0005:    stloc.0    // 将结果存储到局部变量表不太理解计算堆栈的概念
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

与IL 指令相关的三个概念 :

1 Managed Heap 

2 Evaluation Stack

3 Call Stack

只有Evaluation Stack 是栈取数据时是根据栈的特点,先进后出,其它两个都不是栈,可以不按顺序取值 

Dup根据IL指令的解释,是复制一份评估栈(Evaluation Stack)上的值并压入评估栈中,

根据你的问题 如果评估栈中最顶端的值为1 那执行Dup指令 则是将1 先复制一份,然后把副本的1压入评估栈中


查看完整回答
反对 回复 2018-12-18
  • 2 回答
  • 0 关注
  • 634 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信