函式的棧幀過程

2021-08-09 12:15:10 字數 432 閱讀 8957

幾乎所有的函式都使用了棧,沒有棧就沒有函式,沒有區域性變數。在程式執行過程中,棧儲存了乙個函式呼叫所需要的維護資訊,也可稱為堆疊幀或者活動記錄

堆疊幀一般包括以下幾個方面:

(1)函式的返回位址和引數

(2)臨時變數:包括函式的非靜態區域性變數以及編譯器自動生成的其他臨時變數

(3)儲存的上下文:包括在函式呼叫前後需要保持不變的暫存器

在i386中,乙個函式的活動記錄用esp和ebp這兩個暫存器劃定範圍:

(1)esp:始終指向棧頂,同時也就指向當前函式的活動記錄的頂部;

(2)ebp:又被稱為棧指標,指向了函式活動記錄的乙個固定位置。

函式的呼叫過程(函式棧幀)

乙個完整的能實現一些基本功能的程式總要或多或少的呼叫一些函式,但函式的具體呼叫過程是怎樣的,從列印出來的結果來看,顯然是無法得知的,這就需要對函式的呼叫過程有乙個深入地研究。從簡單的 開始 include intadd int x,int y intmain 進行程式除錯,檢視 呼叫堆疊 如下 可以...

函式呼叫過程(棧幀)

眾所周知,程式每呼叫乙個函式,系統都會為其開闢一塊空間,當它返回時,才收回這塊空間。程式崩潰有一部分原因就是因為無限制的呼叫函式,卻沒有及時返回,導致記憶體空間不夠。為了更好的維護這一塊空間 通常稱為棧空間 我們需要了解兩個暫存器,乙個為 esp 指向棧頂的指標 乙個為 ebp 指向棧底的指標 棧空...

函式棧幀(呼叫過程)

函式棧幀就是在呼叫函式是為其在棧空間上開闢了一段空間,指向過程呼叫,乙個過程呼叫包括將資料 以過程引數和返回值的形式 和控制從 的一部分傳遞到另一部分。我們以以下 為例講解整個函式呼叫過程 int my add int x,int y int main 一 呼叫main 函式 我們從main 函式的...