看了IL手冊(cè),手冊(cè)對(duì)Dup的解釋為:復(fù)制計(jì)算堆棧上當(dāng)前最頂端的值,然后將副本推送到計(jì)算堆棧上。如果堆棧上有一個(gè)數(shù),頂層為1,執(zhí)行Dup指令后會(huì)發(fā)生什么?IL_0001: ldloc.0 // 將局部變量表的值5推送到計(jì)算堆棧,此時(shí)計(jì)算堆棧最頂端的值為5IL_0002 dup // 按手冊(cè)意思,將5的副本再次推送到堆棧,那豈不是說(shuō)此時(shí)堆棧有兩個(gè)5?IL_0003: ldc.i4.1 // 將整型數(shù)1推送到堆棧IL_0004: add // 執(zhí)行加操作, 5 + 1 = 6IL_0005: stloc.0 // 將結(jié)果存儲(chǔ)到局部變量表不太理解計(jì)算堆棧的概念
2 回答
開滿天機(jī)
TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
與IL 指令相關(guān)的三個(gè)概念 :
1 Managed Heap
2 Evaluation Stack
3 Call Stack
只有Evaluation Stack 是棧取數(shù)據(jù)時(shí)是根據(jù)棧的特點(diǎn),先進(jìn)后出,其它兩個(gè)都不是棧,可以不按順序取值
Dup根據(jù)IL指令的解釋,是復(fù)制一份評(píng)估棧(Evaluation Stack)上的值并壓入評(píng)估棧中,
根據(jù)你的問題 如果評(píng)估棧中最頂端的值為1 那執(zhí)行Dup指令 則是將1 先復(fù)制一份,然后把副本的1壓入評(píng)估棧中
- 2 回答
- 0 關(guān)注
- 754 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
