誰能解釋malloc()內部工作原理?有時我已經做完了,strace program而且我看到了很多sbrk系統調用,但都在man sbrk談論它的使用情況,malloc()但僅此而已。
3 回答

動漫人物
TA貢獻1815條經驗 獲得超10個贊
簡單地說,malloc和自由工作是這樣的:
malloc提供對進程堆的訪問。堆是C核心庫(通常為libc)中的構造,該構造允許對象獲取對該進程堆上某些空間的排他訪問。
堆上的每個分配稱為堆單元。它通常由一個包含有關單元大小的信息的頭以及指向下一個堆單元的指針組成。這有效地使堆成為鏈表。
當啟動一個進程時,堆包含一個單元,該單元包含啟動時分配的所有堆空間。該單元格存在于堆的空閑列表中。
當一個調用malloc時,內存將從大堆單元中獲取,這由malloc返回。其余部分組成一個新的堆單元,該堆單元由其余所有內存組成。
當一個人釋放內存時,堆單元將添加到堆的空閑列表的末尾。隨后的malloc在空閑列表中查找合適大小的單元。
可以預見的是,堆可能會碎片化,并且堆管理器可能會不時嘗試合并相鄰的堆單元。
當空閑列表上沒有剩余內存可用于所需分配時,malloc調用brk或sbrk,這是系統調用,要求操作系統提供更多內存頁。
現在進行了一些修改以優化堆操作。
對于較大的內存分配(通常> 512字節),堆管理器可能會直接進入OS并分配完整的內存頁面。
堆可以指定最小分配大小,以防止發生大量碎片。
堆也可以將自身劃分為bin,一個用于較小的分配,另一個用于較大的分配,以更快地進行較大的分配。
還有一些優化多線程堆分配的巧妙機制。
- 3 回答
- 0 關注
- 504 瀏覽
添加回答
舉報
0/150
提交
取消