1. 程式人生 > >c語言記憶體函式malloc、calloc、realloc、alloca比較

c語言記憶體函式malloc、calloc、realloc、alloca比較

功能上的區別:

(1)malloc 

申請指定位元組數的記憶體。申請到的記憶體中的初始值不確定。

(2)calloc

為指定長度的物件,分配能容納其指定個數的記憶體申請到的記憶體的每一位(bit)都初始化為0

(3)realloc

 更改以前分配的記憶體長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另一個足夠大的區域,而新增區域內的初始值則不確定

(4)alloca

在棧上申請記憶體。

用法和注意

(1)malloc 

分配指定位元組數的儲存區。此儲存區中的初始值不確定

(2)calloc

為指定長度的物件,分配能容納其指定個數的儲存空間。該空間中的每一位(bit)都初始化為0

(3)realloc

 更改以前分配區的長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另一個足夠大的區域,而新增區域內的初始值則不確定

(4)alloca

因為在棧上申請的記憶體,所以程式在出棧的時候,會自動釋放記憶體。但是需要注意的是,alloca不具可移植性, 而且在沒有傳統堆疊的機器上很難實現。alloca不宜使用在必須廣泛移植的程式中,。C99中支援變長陣列(VLA), 可以用來替代alloca()。

IT從業人員需要及時關注技術動態,但是網際網路的內容卻過於離散,好東西往往隱藏得很深。現在可以在微信公眾號裡面 搜尋關注“小魚兒的IT技術分享”,訂閱我為大家每天彙總的IT技術資訊。歡迎大家關注!