函式的棧幀

2021-08-14 03:15:16 字數 607 閱讀 8898

#includeint add(int x, int y)

int main()

我們發現其實main函式在 __tmaincrtstartup 函式中調⽤用的,⽽ __tmaincrtstartup 函式是在 maincrtstartup 被調⽤用的。

我們知道每一次函式呼叫都是乙個過程。

這個過程我們通常稱之為:函式的調⽤用過程。

這個過程要為函式開闢棧空間,用於本次函式的調⽤用中臨時變量的儲存、現場保護。這塊棧空間我們稱之為函式棧幀。ebp和esp就是維護棧底和棧頂兩個指標的暫存器。

1.首先是main函式棧幀的建立和add函式的呼叫(圖從下向上看)

2.add函式棧幀的建立和釋放,函式的返回(圖從下向上看)

函式的棧幀過程

幾乎所有的函式都使用了棧,沒有棧就沒有函式,沒有區域性變數。在程式執行過程中,棧儲存了乙個函式呼叫所需要的維護資訊,也可稱為堆疊幀或者活動記錄。堆疊幀一般包括以下幾個方面 1 函式的返回位址和引數 2 臨時變數 包括函式的非靜態區域性變數以及編譯器自動生成的其他臨時變數 3 儲存的上下文 包括在函式...

函式的呼叫棧幀

今天來給大家分享一下函式的呼叫過程。我也是剛剛開始學的,還請大家多多指教 我們最常說的乙個 是從main 函式開始的,但是main 函式就不呼叫引數麼?那倒未必。現在就來看看main 函式的呼叫。int add int x,int y int main 先看看這個 然後關於main 函式的呼叫。啟用...

函式棧幀問題

函式呼叫另乙個詞語表示叫作過程。乙個過程呼叫包括將資料和控制從 的一部分傳遞到另一部分。另外,它還必須在進入時為過程的區域性變數分配空間,並在推出時釋放這些空間。而資料傳遞,區域性變數的分配和釋放通過操縱程式棧來實現。棧幀 stack frame 機器用棧來傳遞過程引數,儲存返回資訊,儲存暫存器用於...