函式呼叫程序 棧楨

2021-12-29 21:24:59 字數 789 閱讀 1636

函式呼叫過程------棧楨

例:剖析「比較兩個數之間的大小關係,並把較大數返回」的呼叫原理:

intmax(intx,inty)

intmain()

分析:圖一:main函式是被maincrtstartup呼叫的,所以main函式棧楨的ebp+1存放的是maincrtstartup棧楨ebp:

觀察上圖maincrtstartup 的esp=0018ff4c ebp=0018ff88

圖二:下面這幅圖是maincrtstartup呼叫main的過程,以及main函式棧楨的建立:

圖二:這幅圖是max函式棧楨的建立過程:

圖三:這幅圖是max函式呼叫完成後,max棧楨的銷毀過程:

因為棧要對齊,所以編譯器分配的記憶體如果多了,則就會被浪費。

函式的呼叫,棧楨的建立及銷毀

下面我們主要從棧的層面深入了解c語言中函式呼叫的過程。下面我用乙個簡單的程式說明 include include int add int x,int y int main 011e1880 pop edi 011e1881 pop esi 011e1882 pop ebx 011e1883 add ...

C語言筆記 函式的呼叫過程(棧楨)

堆和棧的理解 一 什麼是棧楨 2 棧幀表示程式的函式呼叫記錄,而棧幀又是記錄在棧上面,很明顯棧上保持了n個棧幀的實體,實際上我們這裡說的棧幀是軟體上的概念,據說有硬體概念,不是很了解 那就可以說棧幀將分割成了n個記錄塊,但是這些記錄塊大小不是固定不變的,因為棧不僅儲存諸如 函式入參,出參,返回位址和...

C語言之棧楨

一 記憶體分布 一般我們把程序的位址空間分為 棧區 heap 堆區 stack 未初始化靜態全域性區 已初始化靜態全域性區 字元常量區 區。如圖 二 棧幀的建立與撤銷 我們知道每一次函式呼叫的過程都要為函式開闢棧空間,用於本次函式呼叫中臨時變數的儲存,現場保護。這塊棧空間稱之為函式棧楨。每乙個函式都...