內存管理

一動態內存分配包含在<stdlib.h>

malloc所分配的是一塊連續的內存,以字節爲單位,
並且不帶任何的類型信息
free用於將動態內存歸還系統
void* malloc(size_t size);
void free(void* pointer);參數爲0時,沒有任何作用。

雖然malloc申請到的內存可能比實際的大,然而是不定的不能利用編譯器的這一行爲。如果分配時找不到足夠大的內存塊會返回空指針。
給n個字符的字符串分配內存空間malloc(n+1),因爲malloc分配是以字節爲單位的,可以不需要類型轉換
void* calloc(size_t num, size_t size);爲num個元素分配空間,每個空間大小爲size個字節
void* realloc(void* pointer, size_t new_size);
calloc的參數代表所返回內存的類型信息
calloc會將返回的內存初始化爲0
realloc用於修改一個原先已經分配的內存塊大小
在使用realloc之後應該使用其返回值
當pointer的第一個參數爲NULL時,等價於malloc,爲0時會釋放掉內存

二程序中的堆

系統對空閒鏈表的管理方法空閒鏈表法,位圖法,對象池法等等
程序中的靜態存儲區:
程序靜態存儲區隨着程序的運行而分配空間,直到程序運行結束
在程序的編譯期靜態存儲區的大小就已經確定
程序的靜態存儲區主要用於保存程序中的全局變量和靜態變量
與棧和堆不同,靜態存儲區的信息最終會保存到可執行程序中

三程序中的內存佈局

各個段的作用
堆棧段在程序運行後才正式存在,是程序運行的基礎
靜態存儲區.bss段存放的是未初始化的全局變量和靜態變量,
.data段保存的是那些已經初始化了的全局變量和靜態變量
 
程序可執行代碼存放於.text段存放的是程序中的可執行代碼
 只讀區.rodata段存放程序中的常量值,如字符串常量



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章