1. 程式人生 > >動態記憶體分配(malloc、free、calloc、realloc)

動態記憶體分配(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個位元組的作為我們申請記憶體的大小。