更新時間:2020年03月31日17時08分 來源:傳智播客 瀏覽次數:
C++內存四區(qū)是哪四區(qū)?C++內存四區(qū)分為代碼區(qū)、全局區(qū)、棧區(qū)、堆區(qū),下面我們分別介紹詳細介紹。
1、代碼區(qū)
存放 CPU 執(zhí)行的機器指令。通常代碼區(qū)是可共享的(即另外的執(zhí)行程序可以調用它),使其可共享的目的是對于頻繁被執(zhí)行的程序,只需要在內存中有一份代碼即可。代碼區(qū)通常是只讀的,使其只讀的原因是防止程序意外地修改了它的指令。另外,代碼區(qū)還規(guī)劃了局部變量的相關信息。推薦了解傳智播客C++工程師培訓課程。
總結:你所寫的所有代碼都會放入到代碼區(qū)中,代碼區(qū)的特點是共享和只讀。
2、全局區(qū)
全局區(qū)中主要存放的數據有:全局變量、靜態(tài)變量、常量(如字符串常量)
全局區(qū)的叫法有很多:全局區(qū)、靜態(tài)區(qū)、數據區(qū)、全局靜態(tài)區(qū)、靜態(tài)全局區(qū)
這部分可以細分為data區(qū)和bss區(qū)
2.1、data區(qū)
data區(qū)里主要存放的是已經初始化的全局變量、靜態(tài)變量和常量
2.2、bss區(qū)
bss區(qū)主要存放的是未初始化的全局變量、靜態(tài)變量,這些未初始化的數據在程序執(zhí)行前會自動被系統(tǒng)初始化為0或者NULL
2.3、常量區(qū)
常量區(qū)是全局區(qū)中劃分的一個小區(qū)域,里面存放的是常量,如const修飾的全局變量、字符串常量等
在VS下運行結果如下:
總結:全局區(qū)存放的是全局變量、靜態(tài)變量和常量
在程序運行后由產生了兩個區(qū)域,棧區(qū)和堆區(qū)
3、棧區(qū)(stack)
棧是一種先進后出的內存結構,由編譯器自動分配釋放,存放函數的參數值、返回值、局部變量等。在程序運行過程中實時加載和釋放,因此,局部變量的生存周期為申請到釋放該段??臻g。
vs運行效果如下
4、堆區(qū)(heap)
堆是一個大容器,它的容量要遠遠大于棧,但沒有棧那樣先進后出的順序。用于動態(tài)內存分配。堆在內存中位于BSS區(qū)和棧區(qū)之間。一般由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統(tǒng)回收。
vs運行效果如下:
當我們把幾個案例放在一起執(zhí)行,就可以看到內存將每個區(qū)域劃分的很有條理。每個區(qū)域互不干涉,區(qū)域中的數據地址也是非常接近的。
猜你喜歡
C++學科之零基礎視頻教程