科普文:C++內存四區詳細介紹


C++內存四區是哪四區?C++內存四區分為代碼區、全局區、棧區、堆區,下面我們分別介紹詳細介紹。

1、代碼區

存放 CPU 執行的機器指令。通常代碼區是可共享的(即另外的執行程序可以調用它),使其可共享的目的是對於頻繁被執行的程序,只需要在內存中有一份代碼即可。代碼區通常是只讀的,使其只讀的原因是防止程序意外地修改了它的指令。另外,代碼區還規划了局部變量的相關信息。推薦了解傳智播客C++工程師培訓課程

總結:你所寫的所有代碼都會放入到代碼區中,代碼區的特點是共享和只讀。

2、全局區

全局區中主要存放的數據有:全局變量、靜態變量、常量(如字符串常量)

全局區的叫法有很多:全局區、靜態區、數據區、全局靜態區、靜態全局區

這部分可以細分為data區和bss區

2.1、data區

data區里主要存放的是已經初始化的全局變量、靜態變量和常量

2.2、bss區

bss區主要存放的是未初始化的全局變量、靜態變量,這些未初始化的數據在程序執行前會自動被系統初始化為0或者NULL

2.3、常量區

常量區是全局區中划分的一個小區域,里面存放的是常量,如const修飾的全局變量、字符串常量等

在VS下運行結果如下:

1585619543609_C++內存四個4.jpg

 

1585619977313_C++內存四個區1.jpg

 

1585619987692_C++內存四個區1.1.jpg

 

 

總結:全局區存放的是全局變量、靜態變量和常量

在程序運行后由產生了兩個區域,棧區和堆區

3、棧區(stack)

棧是一種先進后出的內存結構,由編譯器自動分配釋放,存放函數的參數值、返回值、局部變量等。在程序運行過程中實時加載和釋放,因此,局部變量的生存周期為申請到釋放該段棧空間。

vs運行效果如下

1585620081849_C++內存四個區3.jpg

 

1585620094607_C++內存四個區4.jpg


4、堆區(heap)

堆是一個大容器,它的容量要遠遠大於棧,但沒有棧那樣先進后出的順序。用於動態內存分配。堆在內存中位於BSS區和棧區之間。一般由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統回收。

vs運行效果如下:

1585620109961_C++內存四個區5.jpg

1585620119902_C++內存四個區6.jpg


當我們把幾個案例放在一起執行,就可以看到內存將每個區域划分的很有條理。每個區域互不干涉,區域中的數據地址也是非常接近的。

1585620130010_C++內存四個區7.jpg

C++學習線路圖和免費視頻教程地址:http://yun.itheima.com/map/25.html?2020zelyk


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM