棧幀(函式的呼叫過程)

2021-08-16 18:10:05 字數 882 閱讀 3165

函式:乙個函式的呼叫包括將資料(以引數和返回值的形式)和控制從**的一部分傳遞到另一部分。另外,他還必須在進入時為函式的區域性變數分配空間。並在退出時釋放這些空間。而其中資料傳遞、區域性變數的分配和釋放都是通過操縱棧來實現的。

棧幀:棧用來傳遞函式引數、儲存返回資訊、儲存暫存器用以以後的恢復、以及本地儲存。為單個函式分配的那部分棧被成為棧幀。

學習棧幀前需了解的三個暫存器:esp、ebp、eip。

ebp:幀指標,存放了指向函式棧幀棧幀棧底的位址;

esp:棧指標,存放了指向函式棧幀棧幀棧頂的位址;

eip:當前執行指令的下一條指令的位址。

當程式執行時,棧指標可以移動,因此大部分資訊的訪問都是相對於幀指標的。

1、從main函式的呼叫開始就得為main函式建立棧幀。

2、add函式的呼叫:引數的呼叫是從右向左的。

3、進入add函式。

4、main函式和add函式的聯絡。

函式呼叫過程(棧幀)

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

函式棧幀(呼叫過程)

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

函式的呼叫過程 棧幀

在談棧幀之前,我們必須要先知道c c 程式記憶體的分配情況。乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放為執行函式而分配的局 部變數 函式引數 返回資料 返回位址等。其操作方式類似於資料結構中的 棧。2 堆區 heap 一般由程式設計師分配釋...