C語言對記憶體的使用劃分為以下區域:
堆疊區(stack)、堆區(heap)、全域區(靜態區)、常量區、代碼區,
-
堆疊區:
- 由編譯器自動分配釋放,按記憶體地址從高(地址)到低(地址)存盤;
- 堆疊區內容的作用域為其所定義的函式內,生命周期為函式執行期間,函式結束自動釋放;
- 存放區域變數、const區域變數、函式呼叫時的入口引數和回傳值;
- 堆疊區內容先進后出;
-
堆區:
- 堆區記憶體由程式員管理,堆區空間申請后使用(申請時注意保存地址,防止記憶體泄漏),用完后一定及時手動釋放,防止記憶體泄漏;
- 堆區存盤由低地址向高地址存盤,內容可讀可寫;
- 申請方法:
void *malloc(size_t size);
void free(void *ptr);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size); -
全域(靜態)區:
- 由系統管理,全域(靜態)區內容的生命周期為整個程式運行期間;
- 存放全域變數和static修飾的靜態變數(包括靜態全域變數和靜態區域變數);初始化的放在一塊,未初始化的放在一塊;
- 全域變數和靜態全域變數的作用域均為全域,但其他源檔案可以通過extern關鍵字宣告之后參考全域變數,而不能參考靜態全域變數;
- 靜態區域變數只在其定義函式內可見;
-
常量區:
- 由系統管理,存放常量,const全域變數,只讀;
-
代碼區:
- 由系統管理,存放程式的二進制代碼,只讀;

參考文章:
C語言:記憶體分配---堆疊區、堆區、全域區、常量區和代碼區
c語言中的五種記憶體磁區-筆記
c語言記憶體磁區-(堆,堆疊,全域/靜態存盤區,自由存盤區,代碼區)與可執行程式的三段-(Text段,Date段,Bss段)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545291.html
標籤:其他
