C語言對記憶體的使用劃分為以下區域: 棧區(stack)、堆區(heap)、全局區(靜態區)、常量區、代碼區。 棧區: 由編譯器自動分配釋放,按記憶體地址從高(地址)到低(地址)存儲; 棧區內容的作用域為其所定義的函數內,生命周期為函數執行期間,函數結束自動釋放; 存放局部變數、const局部變數、函數 ...
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段)