動態內存分配(malloc、free、calloc、realloc)

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




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