1 代碼區
存放 CPU 執行的機器指令。通常代碼區是可共享的(即另外的執行程序可以調用它),使其可共享的目的是對于頻繁被執行的程序,只需要在內存中有一份代碼即可。代碼區通常是只讀的,使其只讀的原因是防止程序意外地修改了它的指令。另外,代碼區還規劃了局部變量的相關信息。
總結:你所寫的所有代碼都會放入到代碼區中,代碼區的特點是共享和只讀。
2 全局區
全局區中主要存放的數據有:全局變量、靜態變量、常量(如字符串常量)
全局區的叫法有很多:全局區、靜態區、數據區、全局靜態區、靜態全局區
這部分可以細分為data區和bss區
2.1 data區
data區里主要存放的是已經初始化的全局變量、靜態變量和常量
2.2 bss區
bss區主要存放的是未初始化的全局變量、靜態變量,這些未初始化的數據在程序執行前會自動被系統初始化為0或者NULL
2.3 常量區
常量區是全局區中劃分的一個小區域,里面存放的是常量,如const修飾的全局變量、字符串常量等
在VS下運行結果如下:
總結:全局區存放的是全局變量、靜態變量和常量
在程序運行后由產生了兩個區域,棧區和堆區
3 棧區(stack)
棧是一種先進后出的內存結構,由編譯器自動分配釋放,存放函數的參數值、返回值、局部變量等。在程序運行過程中實時加載和釋放,因此,局部變量的生存周期為申請到釋放該段棧空間。
vs運行效果如下
4 堆區(heap)
堆是一個大容器,它的容量要遠遠大于棧,但沒有棧那樣先進后出的順序。用于動態內存分配。堆在內存中位于BSS區和棧區之間。一般由程序員分配和釋放,若程序員不釋放,程序結束時由操作系統回收。
vs運行效果如下:
當我們把幾個案例放在一起執行,就可以看到內存將每個區域劃分的很有條理。每個區域互不干涉,區域中的數據地址也是非常接近的
-
cpu
+關注
關注
68文章
11279瀏覽量
224995 -
內存
+關注
關注
9文章
3210瀏覽量
76373
發布評論請先 登錄
keil實現c與c++混合編程
C語言與C++的區別及聯系
C語言和C++之間的區別是什么
C/C++條件編譯
C++程序異常的處理機制
嵌入式C/C++回歸測試四大最佳實踐(附自動化測試工具TESSY使用教程)
C/C++代碼靜態測試工具Perforce QAC 2025.3的新特性
技能+1!如何在樹莓派上使用C++控制GPIO?
C++ 與 Python:樹莓派上哪種語言更優?
在OpenVINO? C++代碼中啟用 AddressSanitizer 時的內存泄漏怎么解決?
主流的 MCU 開發語言為什么是 C 而不是 C++?
C/C++中的內存區域劃分
評論