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

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

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

2020-01-26 16:15:22
字體:
供稿:網(wǎng)友

全局變量的生命期和可見性是整個程序的運行期間,下面就來用匯編來看一下實際情況:

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é)存儲區(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;//棧頂指針恢復,釋放為j分配的棧空間
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS


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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 顺义区| 鄂尔多斯市| 昌图县| 胶州市| 原阳县| 林州市| 嘉祥县| 曲周县| 嘉定区| 偏关县| 闻喜县| 霍山县| 大城县| 喜德县| 五寨县| 遂宁市| 浦县| 鄂托克前旗| 香格里拉县| 汉寿县| 西乌珠穆沁旗| 邓州市| 贺州市| 崇义县| 双流县| 甘肃省| 土默特左旗| 古蔺县| 渭南市| 南开区| 辽阳县| 闽清县| 扬州市| 崇左市| 江口县| 阆中市| 恩平市| 扶余县| 丰原市| 萨嘎县| 晋江市|