1. 程式人生 > >C內存分配

C內存分配

自動釋放 nts ade 新增 一個 改變大小 之前 包括 read

calloc和realloc與malloc的區別

calloc和realloc的原型如下:

void *calloc ( size_t num_elements, size_t element_size );

void *realloc (void *ptr, size_t new_size );

calloc和malloc 主要的區別在於前者在返回內存的指針之前將它初始化為0,另外它們請求數量的方式不同。calloc的參數包括所需元素的數量和每個元素的字節,根據這些值可以計算出總共需要分配的內存空間。

realloc函數用於修改一個原先已經分配的內存塊的大小,可以使一塊內存的擴大或縮小。當起始空間的地址為空,即*ptr = NULL,則同malloc。當*ptr非空:若nuw_size < size,即縮小*ptr所指向的內存空間,該內存塊尾部的部分內存被拿掉,剩余部分內存的原先內容依然保留;若nuw_size > size,即擴大*ptr所指向的內存空間,如果原先的內存尾部有足夠的擴大空間,則直接在原先的內存塊尾部新增內存,如果原先的內存尾部空間不足,或原先的內存塊無法改變大小,realloc將重新分配另一塊nuw_size大小的內存,並把原先那塊內存的內容復制到新的內存塊上。

void *alloca(size_t size); 不屬於POSIX.1-2001標準.

alloca在當前調用者的棧上分配size比特的空間,當調用函數返回時,這塊臨時空間被自動釋放.需要註意,如果分配空間造成了溢出,這種行為未定義的.

C內存分配