最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷(xiāo)毀介紹

 更新時(shí)間:2021年12月17日 15:54:17   作者:誠(chéng)摯的喬治  
大家好,本篇文章主要講的是C語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷(xiāo)毀介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

在初學(xué)c語(yǔ)言中,很多時(shí)候要記的內(nèi)容有點(diǎn)多,有時(shí)候并不能深入的了解它。關(guān)于函數(shù)的棧幀可以幫助我們深入了解函數(shù)傳參的過(guò)程,讓我們了解c語(yǔ)言。

以下是我們平時(shí)接觸過(guò),但不了解的問(wèn)題:

1.為什么局部變量在未賦值前是隨機(jī)的。

2.局部變量創(chuàng)建的過(guò)程。

3.函數(shù)傳參,傳參的順序問(wèn)題、

4.形參與實(shí)參的關(guān)系什么。

5.調(diào)用函數(shù)是怎么調(diào)用的,調(diào)用的過(guò)程是什么。

6.調(diào)用函數(shù)結(jié)束后,是怎樣返回的。

這些問(wèn)題我們?cè)趯W(xué)校可能并不會(huì)接觸,也不會(huì)出現(xiàn)在考試的試卷上,但是作為計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生,做一些認(rèn)識(shí)和了解是很有必要的。這就相當(dāng)于我們的內(nèi)功,在以后深入學(xué)習(xí)時(shí),就能夠更快的理解和認(rèn)識(shí)。下面就是函數(shù)調(diào)用的整個(gè)過(guò)程,學(xué)習(xí)完之后,對(duì)以上的問(wèn)題就有一個(gè)答案了。

函數(shù)棧幀就是系統(tǒng)分配給函數(shù)的空間,存放的是地址。

而esp ebp,作用是來(lái)維護(hù)函數(shù)棧幀。

esp ebp跟eax ebx ecx edx一樣,就是系統(tǒng)的寄存器,有一定的存儲(chǔ)功能。

下面就以這個(gè)函數(shù)為例

int Add(int x,int y)
{
   int z=0;
   z=x+y;
   return z;
}
int main()
{
    int a=10;
    int b=20;
    int c=0;
    c=Add(a,b);
printf("%d\n",c);
return 0;
}

main函數(shù)和其他函數(shù)一樣,main函數(shù)也是被調(diào)用的函數(shù)。

其基本邏輯是mainCRTStartup調(diào)用_tmainCRTStartup調(diào)用main函數(shù)

?程序運(yùn)行時(shí),ebp與ebp維護(hù)_tmainCRTStartup,起初esp處在棧頂指針的位置,而ebp處于棧底的位置。

?首先push,繼續(xù)壓棧操作,把ebp的地址打印到esp的位置上?,再把esp的值代到ebp中,esp再加上oE4h的內(nèi)存編號(hào),就形成了下圖情況。

?此時(shí)ebp與esp就來(lái)維護(hù)main函數(shù),在進(jìn)行三次push壓棧,將ebx,esi,edi,壓到棧頂。其目的是讓系統(tǒng)正常的運(yùn)行。

接下來(lái)接是lev mov mov的操作,就讓esp與ebp之間的空間的內(nèi)容全部變?yōu)閏ccccc,這就是在變量未定義前,其值都是隨機(jī)值的原因。

?接下來(lái)就要定義變量abc了,那系統(tǒng)是怎樣在棧區(qū),給abc留有空間來(lái)定義的了?就是以下三步來(lái)實(shí)現(xiàn)的~這就為abc分配了空間。

?

結(jié)果如圖

?

當(dāng)abc定義后,接下來(lái)就是函數(shù)調(diào)用,函數(shù)傳參的過(guò)程。

?系統(tǒng)是先將ab的值分別放在eax ecx的寄存器中。

下面這個(gè)操作跟main函數(shù)開(kāi)辟空間是類(lèi)似的。

下面藍(lán)色部分,是函數(shù)的傳參過(guò)程,由圖易知。?函數(shù)傳參實(shí)際上只是將ab的值保存在寄存器中,在臨時(shí)拷貝給x和y。

?

此時(shí)ebp-8的位置就是z所在的空間,再儲(chǔ)存再寄存器中。

?然后再將edi esi ebx彈出,ebp的地址傳給esp,再將ebp彈出,ebp與esp回到原來(lái)的位置,重新來(lái)維護(hù)main函數(shù)。

?

把儲(chǔ)存在寄存器中z的值傳給c

整個(gè)過(guò)程就是??函數(shù)棧幀的創(chuàng)建和銷(xiāo)毀。說(shuō)到這些,前面所提的問(wèn)題就有了一定的答案,可能我認(rèn)識(shí)的只是其中的一部分,但我相信在以后,會(huì)了解更多,了解更深人,在此進(jìn)行講述出來(lái),這也算是我的目標(biāo)吧。

到此這篇關(guān)于C語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷(xiāo)毀介紹的文章就介紹到這了,更多相關(guān)C語(yǔ)言函數(shù)棧幀的創(chuàng)建和銷(xiāo)毀內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++用boost.signal實(shí)現(xiàn)多播委托

    C++用boost.signal實(shí)現(xiàn)多播委托

    這篇文章介紹了C++用boost.signal實(shí)現(xiàn)多播委托的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C++模板非類(lèi)型形參的詳細(xì)講解

    C++模板非類(lèi)型形參的詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于C++模板非類(lèi)型形參的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作就有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11
  • C/C++中for語(yǔ)句循環(huán)用法以及練習(xí)舉例

    C/C++中for語(yǔ)句循環(huán)用法以及練習(xí)舉例

    for語(yǔ)句是一種循環(huán)語(yǔ)句,它是對(duì)while語(yǔ)句的推廣,下面這篇文章主要給大家介紹了關(guān)于C/C++中for語(yǔ)句循環(huán)用法以及練習(xí)舉例的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C++實(shí)現(xiàn)猜數(shù)字小游戲

    C++實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • OpenCV霍夫變換(Hough Transform)直線檢測(cè)詳解

    OpenCV霍夫變換(Hough Transform)直線檢測(cè)詳解

    這篇文章主要為大家詳細(xì)介紹了OpenCV霍夫變換直線檢測(cè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C程序函數(shù)調(diào)用&系統(tǒng)調(diào)用

    C程序函數(shù)調(diào)用&系統(tǒng)調(diào)用

    這篇文章主要介紹了C程序函數(shù)調(diào)用&系統(tǒng)調(diào)用,需要的朋友可以參考下
    2016-09-09
  • 深入探究協(xié)程在C++中的實(shí)現(xiàn)方式

    深入探究協(xié)程在C++中的實(shí)現(xiàn)方式

    協(xié)程可以被看作是計(jì)算機(jī)程序中的獨(dú)立功能塊,它們?cè)趫?zhí)行過(guò)程中能夠暫停和恢復(fù),與傳統(tǒng)的函數(shù)調(diào)用相比,協(xié)程更像是一種輕量級(jí)的線程,本文我們將深入探究協(xié)程在C++中的實(shí)現(xiàn)方式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • C語(yǔ)言通過(guò)二分查找實(shí)現(xiàn)猜數(shù)字游戲

    C語(yǔ)言通過(guò)二分查找實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了在C語(yǔ)言中如何通過(guò)二分查找思想編寫(xiě)一個(gè)簡(jiǎn)單的猜數(shù)字游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • C++線程安全的單例模式講解

    C++線程安全的單例模式講解

    今天小編就為大家分享一篇關(guān)于C++線程安全的單例模式講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 淺析C++ new的三種面貌

    淺析C++ new的三種面貌

    這篇文章主要介紹了C++ new的三種面貌,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論

阿坝县| 洞头县| 错那县| 新郑市| 德安县| 曲水县| 彭州市| 墨竹工卡县| 淮滨县| 桦南县| 甘肃省| 长汀县| 车致| 麻城市| 宜川县| 南靖县| 称多县| 邢台县| 康平县| 正镶白旗| 金沙县| 高安市| 南乐县| 鹤山市| 利津县| 京山县| 庆安县| 克山县| 建昌县| 买车| 连南| 疏附县| 大新县| 渝中区| 广南县| 理塘县| 灵璧县| 宜兴市| 九龙县| 娄烦县| 吉首市|