動態記憶體分配(malloc、free、calloc、realloc)
阿新 • • 發佈:2019-01-06
1. void* malloc(size_t size); //size_t size表示的是記憶體的總大小
a、malloc所分配的是一塊連續的記憶體,以位元組為單位,並且不帶任何資訊
b、malloc實際分配的記憶體可能比請求的稍微多一點(什麼原因呢?思考一下,我將在下面進行解答)
2.void free(void* pointer)
free用於將動態的記憶體歸還給系統
3.void* calloc(size_t num,size_t size); //size_t num代表的是元素的總個數,size_t size代表元素的資料型別
a、calloc的引數代表所返回記憶體的型別資訊
b、calloc將會返回記憶體的型別資訊
4.void* realloc(void* pointer,size_t new_size); //pointer代表的是之前申請動態記憶體的地址,size_t new_size新申請的記憶體大小
動態記憶體重置
總結:
1.動態記憶體分配是在堆中進行分配
2.malloc用於單純的從堆中申請固定位元組大小的記憶體
3.calloc能以記憶體大小為單位申請記憶體呢並初始化為0
4.realloc用於重置記憶體大小
關於上面為什麼動態記憶體申請比我們申請的記憶體要稍微多一點的解答?
由於動態記憶體的申請是在堆中進行,系統在接受應答指令時,會查詢空閒連結串列節點,
系統會查詢與我們申請的記憶體大小最接近的空閒連結串列的節點。例如:我們申請的空間
為4個位元組,而空閒連結串列的節點有記憶體空間為5個位元組,還有7個位元組的,這時候系統
將會把5個位元組的作為我們申請記憶體的大小。