是的,我正在參加計算機系統課程。 我有幾個關於實現malloc的分配方案的問題。 對於顯式列表,如果我使用類LIFO堆棧實現malloc,指向先前釋放內存的指針的目的究竟是什麼?就像爲什麼你需要雙向鏈表?單鏈表不會同樣工作嗎?Malloc分配方案
Malloc lecture. 我發現這個鏈接在線,你可以看看幻燈片7看看我在說什麼。
查看分隔列表分配方案時,這些列表是單向的嗎?而且,合併機制到底是什麼?比如說,如果釋放4個單詞,當你將它插回到相應的隔離鏈接列表中之前,你是否會首先嚐試並在它周圍的空閒空間中加入它?或者,您是否會簡單地將4個字塊插入相應分離鏈接列表的「4個字」部分?
謝謝。
我想我明白你在說什麼,但是你能詳細說明缺少維護尾隨指針的必要嗎?另外,如果我打電話給一個空閒塊B.我們是否假設B-> next-> prev = B?因爲如果情況並非如此,我不會看到雙向鏈表如何提供幫助。另外,在分離列表分配器中初始化堆的最佳方法是什麼?你會以某種模式劃分頁面嗎? (就像給64個免費的2個單詞塊,64個空閒的4個單詞塊,8個單詞的64個空閒塊......直到你達到指定的無窮大類別或者是否有更好的方法來初始化? – de1337ed 2012-04-04 06:09:18
@ de1337ed:也許你有沒有寫任何節點列表處理代碼?給它一個旋轉:寫一個函數,將節點插入鏈表。保持地址=排序順序。嘗試單鏈接。然後將其修改爲雙向鏈接。 (要回答你的問題,B - > next-> prev'就是* always * B。如果不是,則存在錯誤。)初始化堆取決於實現者的策略決策:是否應該有一堆準備好的512字節塊?取決於系統。 – wallyk 2012-04-04 06:18:16