国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 江都市| 永济市| 运城市| 内黄县| 绥化市| 措美县| 灌阳县| 柘荣县| 锡林浩特市| 四平市| 武乡县| 来安县| 佛教| 南投县| 桂平市| 偏关县| 银川市| 古浪县| 许昌市| 安阳市| 田阳县| 同德县| 咸宁市| 新化县| 尉氏县| 平乡县| 泾阳县| 汝南县| 嘉善县| 阿图什市| 射洪县| 固安县| 华蓥市| 阳泉市| 唐河县| 上蔡县| 西吉县| 宁津县| 金寨县| 都匀市| 灵璧县|