亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于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條經驗 獲得超13個贊

與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 關注
  • 710 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號