函式的呼叫及棧幀的建立和銷毀

2021-08-13 06:47:23 字數 853 閱讀 4765

函式在呼叫的過程中分為三步,第一步是函式的呼叫,第二步是執行函u數體,第三步是返回。

第一步  函 數的呼叫

2.將實參從後往前依次入棧;

3.跳轉到函式體處。

第二部   函式體執行

1.如果函式體中定義了變數,將變數入棧;

2.將每乙個形參用實參的值取代,執行函式體的功能;

3.將函式體中的變數和儲存到棧中的實參值,依次從棧中取出,釋放棧空間。

第三部   返回

從main函式的地方開始,要展開main函式的呼叫就得為main函式建立棧幀,ebp存放了指向函式棧幀棧底的位址,esp存放了指向函式棧幀棧頂的位址,當main函式呼叫其他函式時先給函式建立棧幀,當呼叫完成次函式返回main函式時,被呼叫的函式的棧幀就會被銷毀。

函式的呼叫過程 棧幀的建立和銷毀

首先我們要了解一些概念。1.棧 stack 由編譯器自動分配釋放,存放為執行函式而分配的區域性變數 函式引數 返回函式 返回位址等。操作方式類似於資料結構中的棧。棧向下生成 先定義的位址高,後定義的位址低 2.堆 heap 由程式設計師分配釋放 若程式設計師不釋放,程式結束時可能由os 分配方式類似...

函式的呼叫過程,棧幀的建立和銷毀

我們大家學習c語言肯定都知道函式,但大家可能都只會用函式,對它的了解只是上層的,並不知道它的呼叫過程,今天我們就一起來深入的研究一下函式的呼叫過程。首先,我們要知道的是,在函式呼叫時,程式將使用乙個執行時堆疊,它裡邊存區域性變數和返回位址,執行時堆疊由ebp 存放維護這個棧的棧底指標 和esp 存放...

C語言 函式的呼叫過程及棧幀的建立和銷毀

一 說起函式呼叫,我們可能很快就想到 程式從main函式走起,遇到呼叫函式的語句,就跳轉到此函式所在的語句塊執行此函式,執行完之後再返回main函式繼續執行程式。但是這只是籠統的描述,其實在函式內部,函式呼叫要經過一系列的複雜的過程,下面為大家一一詳細敘述。1.說到函式呼叫,我們不可避免的要說到棧幀...