malloc的用法

原文鏈接https://blog.csdn.net/linan5231/article/details/50930630


1、函數聲明

void *malloc(int size);

說明:malloc向系統申請分配size字節的內存空間,返回類型爲void*類型。


2、使用

int *p;

p = (int *)malloc( sizeof(int) );

注意:

(1)因爲malloc返回的是不確定類型的指針,所以返回之前必須經過類型強制轉換,否則編譯報錯,如:“ 不能將void* 賦值給int*變量 ”。

(2)malloc只管分配內存,並不會初始化,其內存空間中的值可能是隨機的。如果分配的這塊空間原來沒有被使用過,那麼其中每個值都可能是0。相反,空間裏面可能遺留各種各樣的值。

(3)實參爲需要分配的字節大小,如果malloc(1),那麼系統只分配了1個字節的內存空間,這時注意,如果在這塊空間中存放一個int值,由於int類型佔4個字節,那麼還有3個字節未分配空間,系統就會在已經分配的那1個字節的基礎上,依次向後分配3個字節空間,而這就佔有了“別人”的3個字節空間,“別人”原有的值就被清空了。

(4)分配的空間不再使用時,要用free函數釋放這塊內存空間。


3、示例

分配100個int類型的空間:

int *p;

p = (int )malloc( sizeof(int) 100 );


4、malloc函數工作機制

(1)malloc函數被調用時,它會沿空閒鏈表尋找一個可以滿足需求的內存塊,然後把所需大小的內存塊分配給用戶,剩下的返回到鏈表上。free函數被調用時,它將釋放的內存塊連接到空閒鏈表上。

(2)到最後,空閒鏈表會被分成很多小的內存片段,當用戶申請一塊較大的內存空間時,空閒鏈表上可能沒有滿足需求的內存塊了,這時,malloc函數請求延時,並將空閒鏈表內的小內存片段整理成大的內存塊,最終返回。

發佈了92 篇原創文章 · 獲贊 8 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章