計算機在執行呼叫函式的過程中,會根據函式完成一些工作,比如資料的傳遞(形參拷貝、返回值)、記憶體的分配和釋放、執行控制和轉移,這些操作需要通過形成乙個棧幀來完成。
棧幀(stack frame):棧幀就是函式執行的環境。每個函式在被呼叫的時候都會在棧區形成乙個叫做棧幀的結構,這個結構儲存了函式引數、區域性變數、函式執行完後返回到**等一些資料
1.ebp:棧底指標,esp:棧頂指標,棧幀指標只有一對
3.push:入棧,pop:出棧
4.ptr:相當於指標
5.mov:類似於賦值操作
3.add:加法操作,sub:減法操作
#include #include下面是main函式呼叫fun函式之前的一些操作:int fun( int x, int
y)
intmain()
1.引數拷貝(引數例項化)。
2.儲存當前指令的下一條指令,並跳轉到被掉函式。
這些操作在main函式中進行。
接下來是呼叫fun函式並執行的一些操作:
1.移動ebp、esp形成的新的棧幀結構。
2.push壓棧形成臨時變數並執行相關操作。
3.return乙個值。
這些都是在fun中進行。
1.出棧(pop)。
2.回覆main函式的幀棧結構
3.返回main函式
這些操作也在fun中進行
至此,在main中呼叫fun的整個過程已經完成。
原部落格:
函式呼叫過程
每乙個未執行完的函式都對應著乙個棧幀,系統為單個函式分配的那部分棧空間就叫做棧幀,棧幀儲存了函式的資訊。以下面的 為例,通過彙編 的執行過程介紹棧幀建立和銷毀的過程 include int add int x,int y int main 從main函式建立自己的棧幀開始 其他內容先忽略 初始狀態 ...
函式呼叫過程
c語言種有三種迴圈 do.while while for 初始化 條件判斷 步進 主函式 main 庫函式自定義函式函式的發明,使得變成可以以函式為單位進行模組化,叫做面向過程。軟體工程中,有 高內聚,低耦合 的要求。函式就是為了實現以上要求發明的產物。函式是面向過程的 介面 其介面包含了 引數 返...
函式呼叫過程
引數代入順序 引數入棧的順序是從右向左入棧的。8位元組的引數代入 push入棧的方式將引數傳遞 8位元組的引數代入 先在main函式的棧頂向上移動12位元組,然後將引數的資料拷貝到main函式棧頂開闢的記憶體。int fun1 int a,int b int main 第一步進行函式引數入棧,如圖 ...