国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

從匯編看C++中變量類型的解析

2020-02-24 14:34:36
字體:
供稿:網(wǎng)友

為了讓小伙伴們能循序漸進(jìn)地學(xué)習(xí)C語言,今天武林技術(shù)頻道的小編就給各位帶來這篇從匯編看c++中變量類型的解析,有助于我們更好的了解C語言,一起往下學(xué)習(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é)存儲(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分配的棧空間
??? 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ù)中在棧上動(dòng)態(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í)行之前。

以上就是從匯編看C++中變量類型的解析,C++很強(qiáng)大,我們還要繼續(xù)學(xué)習(xí)和研究。 更多關(guān)于C++的內(nèi)容,請繼續(xù)關(guān)注武林技術(shù)頻道。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蕉岭县| 东兰县| 定兴县| 策勒县| 丹江口市| 红安县| 金山区| 洞口县| 涞源县| 句容市| 定兴县| 孟连| 平潭县| 汉源县| 大理市| 隆化县| 大同市| 肃北| 大渡口区| 津市市| 彰化市| 邹城市| 屏南县| 遂昌县| 太白县| 夏邑县| 巴里| 莲花县| 石家庄市| 渭南市| 洛川县| 伊宁县| 连山| 乌恰县| 无为县| 崇州市| 二连浩特市| 巴中市| 灵石县| 都安| 收藏|