看了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條經驗 獲得超13個贊
與IL 指令相關的三個概念 :
1 Managed Heap
2 Evaluation Stack
3 Call Stack
只有Evaluation Stack 是棧取數據時是根據棧的特點,先進后出,其它兩個都不是棧,可以不按順序取值
Dup根據IL指令的解釋,是復制一份評估棧(Evaluation Stack)上的值并壓入評估棧中,
根據你的問題 如果評估棧中最頂端的值為1 那執行Dup指令 則是將1 先復制一份,然后把副本的1壓入評估棧中
- 2 回答
- 0 關注
- 710 瀏覽
添加回答
舉報
0/150
提交
取消