欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從匯編看c++中變量類型的深入分析

 更新時(shí)間:2013年05月12日 14:04:29   作者:  
本篇文章是對c++中的變量類型進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下

全局變量的生命期和可見性是整個(gè)程序的運(yùn)行期間,下面就來用匯編來看一下實(shí)際情況:

c++源碼:

復(fù)制代碼 代碼如下:

int i = 2;//全局變量

int main() {
    int j = i;
}

下面是匯編代碼:

復(fù)制代碼 代碼如下:

PUBLIC    ?i@@3HA                        ; i
_DATA    SEGMENT
?i@@3HA    DD    02H                    ; 全局變量i內(nèi)存空間
_DATA    ENDS
PUBLIC    _main
; Function compile flags: /Odtp
; File c:\users\administrator\desktop\c++\test\a.cpp
_TEXT    SEGMENT
_j$ = -4                        ; size = 4
_main    PROC

; 3    : int main() {

    push    ebp
    mov    ebp, esp
    push    ecx;為局部變量分配4字節(jié)存儲區(qū)

; 4    :     int j = i;

    mov    eax, DWORD PTR ?i@@3HA            ; 獲取全局變量i的的值
    mov    DWORD PTR _j$[ebp], eax;eax存有i的值,將它賦給局部變量j

; 5    : }

    xor    eax, eax
    mov    esp, ebp;//棧頂指針恢復(fù),釋放為j分配的??臻g
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS


從匯編語言中可以看到,全局變量i的內(nèi)存分配在內(nèi)存中的數(shù)據(jù)區(qū)(由_DATA指定),因此在程序運(yùn)行的過程中始終存在,所以對于程序中的所有部分都可以訪問,而且隨著程序的結(jié)束銷毀;而局部變量j的內(nèi)存是在運(yùn)行main函數(shù)中在棧上動態(tài)分配,而且main函數(shù)結(jié)束后,此空間被釋放,因此在main函數(shù)外面不能訪問局部變量j。

實(shí)際上,在操作系統(tǒng)載入可執(zhí)行文件的時(shí)候,它首先將數(shù)據(jù)區(qū)中的數(shù)據(jù)載入相應(yīng)的內(nèi)存,然后才開始運(yùn)行程序,因此,全局變量產(chǎn)生在文件加載之后,第一條程序語言執(zhí)行之前。

相關(guān)文章

  • C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解

    C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解

    這篇文章主要介紹了C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解的相關(guān)資料,這里主要說明C++中數(shù)據(jù)結(jié)構(gòu)的遞歸的應(yīng)用,需要的朋友可以參考下
    2017-08-08
  • C語言動態(tài)分配二維字符串?dāng)?shù)組的方法

    C語言動態(tài)分配二維字符串?dāng)?shù)組的方法

    小編最近忙里偷閑,給大家整理一份教程關(guān)于C語言動態(tài)分配二維字符串?dāng)?shù)組的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10
  • c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算

    c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算

    這篇文章主要介紹了c++將引用或者是指針作為函數(shù)參數(shù)實(shí)現(xiàn)實(shí)參的運(yùn)算,需要的朋友可以參考下
    2014-05-05
  • 從頭學(xué)習(xí)C語言之for語句和循環(huán)嵌套

    從頭學(xué)習(xí)C語言之for語句和循環(huán)嵌套

    這篇文章主要為大家詳細(xì)介紹了C語言之for語句和循環(huán)嵌套,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C和C++如何實(shí)現(xiàn)互相調(diào)用詳解

    C和C++如何實(shí)現(xiàn)互相調(diào)用詳解

    在學(xué)習(xí)c++中用到一些古老的c語言庫時(shí),在工作中我們經(jīng)常要使用C和C++混合編程,下面這篇文章主要給大家介紹了關(guān)于C和C++如何實(shí)現(xiàn)互相調(diào)用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • C++實(shí)現(xiàn)Linux下彈出U盤的方法

    C++實(shí)現(xiàn)Linux下彈出U盤的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)Linux下彈出U盤的方法,實(shí)例分析了C++在Linux平臺上進(jìn)行IO操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表)

    C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 用typedef定義類型的總結(jié)分析

    用typedef定義類型的總結(jié)分析

    除了可以直接使用C提供的標(biāo)準(zhǔn)類型名(如:int ,char ,float,double,long等)和自己聲明的結(jié)構(gòu)體、共用體、枚舉類型外,還可以使用typedef聲明 新的類型名 來代替 已有的 類型名
    2013-08-08
  • C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    C語言數(shù)組與地址、數(shù)組名到底是什么詳解

    在寫代碼的時(shí)候,我們經(jīng)常用到數(shù)組,那么有沒有想過數(shù)組名是什么呢?這篇文章主要給大家介紹了關(guān)于C語言數(shù)組與地址、數(shù)組名到底是什么的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 深入了解C++中常用的三個(gè)智能指針

    深入了解C++中常用的三個(gè)智能指針

    C++是一門強(qiáng)大的編程語言,但是在內(nèi)存管理方面卻存在著一些問題。手動管理內(nèi)存不僅費(fèi)時(shí)費(fèi)力,而且容易出錯(cuò)。因此,C++中引入了智能指針這一概念,以更好地管理內(nèi)存,下面就來詳細(xì)講講C++中常用的三個(gè)智能指針吧
    2023-05-05

最新評論