我們先看一段簡單的**:
#includeint add(int x, int y)
int main()
我們先開啟呼叫堆疊:
可以看到,main函式是在_tmaincrtstartup這個函式被呼叫的,而這個函式又是在maincrtstartup函式中被呼叫的。
每一次的函式呼叫過程都要為函式開闢棧空間,用於此次函式呼叫中臨時變數的儲存,現場保護。這塊棧空間我們稱之為函式棧幀。
首先,我們要了解ebp和esp這兩個暫存器。在函式的呼叫過程中,這兩個暫存器存放了維護這個棧的棧底和棧頂指標。
詳細研究函式呼叫過程,要對應彙編**。
1.先從main函式的呼叫開始。函式呼叫結束後是add函式的呼叫。
執行call指令的時候按f11,來到了這裡。
接著按f10,進入add函式內部。
2.執行add函式。
3.函式返回。
這就是整個函式呼叫的過程。
注意:棧幀這部分內容在不同的編譯器上存在差異,但思想是相同的。
C語言學習13(函式的呼叫)
函式的呼叫 函式的呼叫 單行語句的呼叫,如 max x,y 在表示式中呼叫,如 k max x,y 例項5 2 計算代數式1 1 2 1 3 1 m include stdio.h include conio.h double jie int m void main printf 1 1 2 1 3...
C語言學習筆記(2) 呼叫函式
1.1 函式呼叫的一般形式有三種 1 函式呼叫語句,如 printf star 2 函式表示式。3 函式引數。1.2函式呼叫的過程。1 未進行函式呼叫時,形參不占用儲存單元。2 將實參的值傳遞給形參。3 執行呼叫函式期間,形參已經被賦予了值。4 通過return語句將函式值帶回到主函式。5 呼叫過程...
C語言學習總結
1 c語言中有乙個賦值表示式,是其他多數高階語言中沒有的。2 c 語言的輸入與輸出操作是由函式來完成的,它不提供輸入輸出語句。3 c語言中有乙個共用體,其變數所點記憶體長度是其最長 成員變數的長度。4 static char a language char p a 8 5 void main int...