古詩詞大全網 - 古詩大全 - malloc函數的用法

malloc函數的用法

malloc函數的用法就是和free函數配對使用。

malloc的全稱是memory allocation,中文叫動態內存分配,用於申請壹塊連續的指定大小的內存塊區域以void*類型返回分配的內存區域地址。當無法知道內存具體位置的時候,想要綁定真正的內存空間,就需要用到動態的分配內存,且分配的大小就是程序要求的大小。

其作用是在內存的動態存儲區中分配壹個長度為size的連續空間,此函數的返回值是分配區域的起始地址,或者說,此函數是壹個指針型函數,返回的指針指向該分配域的開頭位置。

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針壹定要適當對齊,使其可以用於任何數據對象。

工作機制

malloc函數的實質體現在,它有壹個將可用的內存塊連接為壹個長長的列表的所謂空閑鏈表的功能。調用malloc函數時,它沿連接表尋找壹個大到足以滿足用戶請求所需要的內存塊。然後,將該內存塊壹分為二(壹塊的大小與用戶請求的大小相等,另壹塊的大小就是剩下的字節)。

接下來,將分配給用戶的那塊內存傳給用戶,並將剩下的那塊(如果有的話)返回到連接表上。調用free函數時,它將用戶釋放的內存塊連接到空閑鏈上。到最後,空閑鏈會被切成很多的小內存片段,如果這時用戶申請壹個大的內存片段,那麽空閑鏈上可能沒有可以滿足用戶要求的片段了。

於是,malloc函數請求延時,並開始在空閑鏈上翻箱倒櫃地檢查各內存片段,對它們進行整理,將相鄰的小空閑塊合並成較大的內存塊。如果無法獲得符合要求的內存塊,malloc函數會返回NULL指針,因此在調用malloc動態申請內存塊時,壹定要進行返回值的判斷。

以上內容參考:百度百科—malloc函數