溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

函數(shù)的調(diào)用原理——棧楨

發(fā)布時間:2020-06-24 12:35:07 來源:網(wǎng)絡(luò) 閱讀:836 作者:我是你帆哥 欄目:編程語言

函數(shù)調(diào)用過程------棧楨

例:剖析“比較兩個數(shù)之間的大小關(guān)系,并把較大數(shù)返回”的調(diào)用原理

int Max(int x, int y)
{
                 int z = 0;
                 if (x > y)
                                z = x;
                 else
                                z = y;
                 return z;
}
int main()
{
                 int a = 10;
                 int b = 20;
                 int c = 0;
                c = Max(a, b);
                printf( "%d\n", c);
                system( "pause");
                 return 0;
}

分析:


圖一:

main函數(shù)是被mainCRTStartup調(diào)用的,所以main函數(shù)棧楨的ebp+1存放的是mainCRTStartup棧楨ebp:

函數(shù)的調(diào)用原理——棧楨

函數(shù)的調(diào)用原理——棧楨

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


圖二:

下面這幅圖是mainCRTStartup調(diào)用main的過程,以及main函數(shù)棧楨的創(chuàng)建:

函數(shù)的調(diào)用原理——棧楨函數(shù)的調(diào)用原理——棧楨

圖二:

這幅圖是Max函數(shù)棧楨的創(chuàng)建過程:

函數(shù)的調(diào)用原理——棧楨

函數(shù)的調(diào)用原理——棧楨

圖三:

這幅圖是Max函數(shù)調(diào)用完成后,Max棧楨的銷毀過程:

函數(shù)的調(diào)用原理——棧楨


函數(shù)的調(diào)用原理——棧楨

整個程序在執(zhí)行的過程中,函數(shù)的棧楨可以抽象如下圖,注意,棧是由高地址向低地址走的:

函數(shù)的調(diào)用原理——棧楨函數(shù)的調(diào)用原理——棧楨

因為棧要對齊,所以編譯器分配的內(nèi)存如果多了,則就會被浪費。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI