我有一塊內存,讓我們說'NN'MB。我想要一個自定義的內存管理器,只會從這個內存中分配。內存管理器應該能夠分配,使用已經可用的塊釋放。如果它也可以處理碎片,那將很棒。小內存管理器
編輯:我在C中尋找一些開源,或者是有一些像malloc和免費的API。
我有一塊內存,讓我們說'NN'MB。我想要一個自定義的內存管理器,只會從這個內存中分配。內存管理器應該能夠分配,使用已經可用的塊釋放。如果它也可以處理碎片,那將很棒。小內存管理器
編輯:我在C中尋找一些開源,或者是有一些像malloc和免費的API。
能夠「處理」碎片是一個相當陡峭的要求。如果您的意思是管理員必須能夠將內存碎片化,這意味着它不能具有標準的C malloc()
API。您需要一個間接API,其中內存分配不是由實際的直接取消引用的地址引用的,而是更抽象的東西。
這是因爲您的內存管理器必須能夠在碎片整理期間移動分配的內存塊,並且如果應用程序將直接絕對指針保存到分配的內存中,則無法這樣做。
當然,迫使應用程序在其內存使用間接意味着許多常見的C成語和API突破,因爲自由使用指針期望在C.
是常見它必須是C嗎? C++的Loki分配器可以做到這一點
我強烈建議檢查安德烈Alexandrescu的的Policy-Based Memory Allocation Fine-tuning your memory management
還有一個video of a talk他在這個問題上做了,它也強烈建議作爲一個學習資源。
看到油嘴滑舌malloc()和存儲量減少
除非被「鎖定」爲指針,標準的API中使用,然後「釋放」,經理不走動鎖定塊..但在實際使用中會很笨拙,所以我同意,處理碎片是一個很大的問題。 – 2009-04-09 07:39:46