第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

EBP幀指針寄存器的用途是什么?

EBP幀指針寄存器的用途是什么?

EBP幀指針寄存器的用途是什么?我是匯編語言的初學者,并注意到編譯器發(fā)出的x86代碼通常會在釋放/優(yōu)化模式下保持幀指針,因為它可以將EBP寄存器用于其他東西。我理解為什么幀指針可能使代碼更容易調(diào)試,并且如果alloca()在函數(shù)內(nèi)調(diào)用則可能是必要的。但是,x86只有很少的寄存器,并使用其中兩個寄存器來保存堆棧幀的位置,當一個就足夠了,對我來說沒有意義。為什么即使在優(yōu)化/發(fā)布版本中省略框架指針也是一個壞主意?
查看完整描述

3 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

幀指針是一個引用指針,允許調(diào)試器通過單個常量偏移量知道局部變量或參數(shù)的位置。雖然ESP的值在執(zhí)行過程中會發(fā)生變化,但EBP保持不變,因此可以在相同的偏移量下達到相同的變量(例如,第一個參數(shù)將始終位于EBP + 8,而ESP偏移量可能會發(fā)生顯著變化,因為您將推動/彈出的東西)

為什么編譯器不丟棄幀指針?因為使用幀指針,調(diào)試器可以確定局部變量和參數(shù)在哪里使用符號表,因為它們保證與EBP保持一個恒定的偏移量。否則,沒有一種簡單的方法可以確定局部變量在代碼中的任何位置。

正如Greg所提到的,它還有助于堆棧展開調(diào)試器,因為EBP提供了堆棧幀的反向鏈接列表,因此讓調(diào)試器能夠計算出函數(shù)的堆棧幀(局部變量+參數(shù))的大小。

大多數(shù)編譯器提供了省略幀指針的選項,盡管它使調(diào)試變得非常困難。永遠不要在全局使用該選項,即使在發(fā)布代碼中也是如此。您不知道何時需要調(diào)試用戶的崩潰。


查看完整回答
反對 回復(fù) 2019-08-12
?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

把我的兩分錢加到已經(jīng)很好的答案上。

它是具有一系列堆棧幀的良好語言架構(gòu)的一部分。BP指向當前幀,其中存儲子例程局部變量。(當?shù)厝颂幱谪撈?,參?shù)處于正偏移量。)

它阻止了一個非常好的寄存器被用于優(yōu)化的想法提出了一個問題:優(yōu)化的時間和地點實際上值得嗎?

優(yōu)化僅在緊密循環(huán)中是值得的,1)不調(diào)用函數(shù),2)程序計數(shù)器花費大部分時間,3)編譯器實際將看到的代碼(即非庫函數(shù))。這通常只是整個代碼的一小部分,特別是在大型系統(tǒng)中。

其他代碼可以被扭曲和擠壓以擺脫循環(huán),并且它無關(guān)緊要,因為程序計數(shù)器幾乎從不存在。

我知道你沒有問過這個問題,但根據(jù)我的經(jīng)驗,99%的性能問題與編譯器優(yōu)化沒什么關(guān)系。它們與過度設(shè)計有關(guān)。


查看完整回答
反對 回復(fù) 2019-08-12
?
交互式愛情

TA貢獻1712條經(jīng)驗 獲得超3個贊

當然,這取決于編譯器。我見過x86編譯器發(fā)出的優(yōu)化代碼,它們可以自由地使用EBP寄存器作為通用寄存器。(我不記得我注意到哪個編譯器。)

編譯器也可以選擇維護EBP寄存器以協(xié)助異常處理期間的堆棧展開,但這又取決于精確的編譯器實現(xiàn)。


查看完整回答
反對 回復(fù) 2019-08-12
  • 3 回答
  • 0 關(guān)注
  • 868 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號