關於棧指針的簡單筆記

棧是包含數據的一塊連續內存區域,SP(stack pointer)指向棧的頂部,棧的底部是一個確定後不可更改的地址,棧的大小在運行時被kernel動態調整,棧的POP和PUSH操作由CPU實現。

當調用一個函數的時候,一個邏輯棧幀(logical stack frame)被構造,函數退出時,這個邏輯棧幀就釋放。一個邏輯棧幀包含指向函數的指針,包括函數裏的局部變量,和可以恢復到上一個棧幀的數據等。

如果我們除了SP之外還有一個指向當前棧幀固定位置的指針,會使得很多操作變得方便,所以引入了FP(frame pointer)或者稱作LB(local base pointer)。如果假設當前系統中棧是從高處往低處增長的,那麼函數的參數在FP的正偏移處,函數裏面的局部變量在FP的負偏移處。

當一個函數被調用的時候,它要做的第一件事情是:儲存前一個FP。因爲這樣一來,可以在函數退出的時候將FP的值恢復。

發佈了31 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章