2009-10-28 214 views
1

malloc調用如何由用戶庫管理。我需要解釋「當malloc被調用時,如何在用戶空間分配內存,誰管理它,就像調用sbrk()進入內核空間一樣」。動態分配內存

+10

你將需要解釋你的意思。 – 2009-10-28 06:38:51

+3

...並搜索所以,你可能會找到你需要的! – dirkgently 2009-10-28 06:42:37

回答

4

malloc()函數包管理空間。它使用sbrk()從系統中獲得相對較大的內存塊,並根據請求使用它設計使用的許多可能算法中的任何一種,將較小的塊傳遞給其調用者。 free()函數將釋放的內存放回到「可用」內存列表中。它很少真正將內存釋放回操作系統本身。

有很多關於不同版本malloc()的設計的文章。有許多malloc()的調試版本,特別是尋找分配內存的濫用情況。您可以在Knuth的「計算機編程藝術」中閱讀關於內存分配的內容;它在我的記憶服務第1卷。

6

C運行時庫管理堆。堆有一些預先分配的免費商店。如果運行時無法找到連續的塊,則它會嘗試從操作系統請求更多內存 - 調用sbrk()

如果後者失敗「內存不足」被報告 - malloc()返回空指針。如果成功請求了額外的內存,並且接收到的塊大於malloc()調用者請求塊中塊的內容被劃分 - 一部分被標記爲佔用並返回給調用者,另一部分被添加到免費存儲區。

sbrk()成功返回時起,內存塊屬於調用程序地址空間。