從匯編看c++中變量類型的深入分析
全局變量的生命期和可見(jiàn)性是整個(gè)程序的運(yùn)行期間,下面就來(lái)用匯編來(lái)看一下實(shí)際情況:
c++源碼:
int i = 2;//全局變量
int main() {
int j = i;
}
下面是匯編代碼:
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é)存儲(chǔ)區(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
從匯編語(yǔ)言中可以看到,全局變量i的內(nèi)存分配在內(nèi)存中的數(shù)據(jù)區(qū)(由_DATA指定),因此在程序運(yùn)行的過(guò)程中始終存在,所以對(duì)于程序中的所有部分都可以訪問(wèn),而且隨著程序的結(jié)束銷毀;而局部變量j的內(nèi)存是在運(yùn)行main函數(shù)中在棧上動(dòng)態(tài)分配,而且main函數(shù)結(jié)束后,此空間被釋放,因此在main函數(shù)外面不能訪問(wèn)局部變量j。
實(shí)際上,在操作系統(tǒng)載入可執(zhí)行文件的時(shí)候,它首先將數(shù)據(jù)區(qū)中的數(shù)據(jù)載入相應(yīng)的內(nèi)存,然后才開(kāi)始運(yùn)行程序,因此,全局變量產(chǎn)生在文件加載之后,第一條程序語(yǔ)言執(zhí)行之前。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
C語(yǔ)言設(shè)計(jì)一個(gè)閃閃的圣誕樹
本文使用C語(yǔ)言基礎(chǔ)知識(shí)在控制臺(tái)打印一個(gè)圣誕樹效果,真的很簡(jiǎn)單哦,一起通過(guò)本文學(xué)習(xí)吧2016-12-12
基于Opencv實(shí)現(xiàn)顏色識(shí)別
這篇文章主要為大家詳細(xì)介紹了基于Opencv實(shí)現(xiàn)顏色識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
C/C++關(guān)于實(shí)現(xiàn)CAN信號(hào)的獲取方法
這篇文章主要介紹了C/C++關(guān)于實(shí)現(xiàn)CAN信號(hào)的獲取方法,標(biāo)準(zhǔn)的CAN 數(shù)據(jù)為8字節(jié),即64位,但是CAN FD的最大數(shù)據(jù)可為64字節(jié),為512位,其中的幀ID分為標(biāo)準(zhǔn)幀和擴(kuò)展幀,其中用11位標(biāo)準(zhǔn)幀,用29位表示擴(kuò)展幀2023-02-02
c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法
下面小編就為大家?guī)?lái)一篇c++中臨時(shí)變量不能作為非const的引用參數(shù)的方法。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
字符串拷貝函數(shù)memcpy和strncpy以及snprintf 的性能比較
以下是對(duì)字符串拷貝函數(shù)memcpy和strncpy以及snprintf它們之間的性能進(jìn)行了比較,需要的朋友可以過(guò)來(lái)參考下2013-07-07
Objective-C不帶加減號(hào)的方法實(shí)例
顯而易見(jiàn)的事實(shí)是,Objective-C 中,+ 表示類方法,- 表示實(shí)例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號(hào)的相關(guān)資料,需要的朋友可以參考下2021-06-06
C語(yǔ)言實(shí)現(xiàn)掃雷游戲及其優(yōu)化
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲及其優(yōu)化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08

