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個字節的作爲我們申請內存的大小。