我在寫內存管理器。我分配一大塊動態內存並將其分割成各種大小的內存池。大小範圍從8到256的8的倍數。當有內存請求時,根據大小,我從一個池中分配一個內存塊。我維護一個映射所需大小和內存池的散列表。
我不想在分配的內存中保留簿記信息,因此我使用每個池的單個鏈表來跟蹤空閒塊。 我的問題是 i)由於塊大小在內存池中的所有塊上是一致的,因此我決定不對塊進行排序。即當有內存請求時,我將分配內存池中的第一個塊,當它被釋放時,我會將它插入空閒列表的前面。這樣,內存分配和釋放都會更快。另外,由於池中的塊大小相同,因此不會發生碎片。你看到這個有什麼問題嗎?內存管理器的數據結構
回答
是的,有一個LIFO棧來容納所有相同大小的未使用的內存塊是最簡單的解決方案。我曾經做過這樣的事情...
我只會給你一個建議。在分配像這樣的內存時,不會發出指向分配區域開頭的指針。哦,另外一個堆棧在哪裏推分配塊是個好主意,所以你知道它們是哪個。
我將存儲指向巨大塊的指針。但爲什麼我應該有另一個堆棧來存儲所有分配的塊?當程序關閉時,我將取消分配整個塊。 – linuxfreak
首先你將有兩個堆棧交換元素(有關分配內存的信息),這比每次釋放一個內存塊時生成新元素要快得多。您也可以考慮使用已使用的元素堆棧。 – Kupto
但是,首先爲使用過的元素建立堆棧有什麼意義? – linuxfreak
- 1. 管理超過所有可用內存的數據結構
- 2. 良好的圖形數據結構內存管理策略
- 3. C結構的內存管理
- 4. Breeze實體管理器緩存的數據結構
- 5. 初始化數據結構用C來管理內存
- 6. 內存表數據結構
- 7. 庫存管理表結構
- 8. ObjectiveC - 構造函數,內存管理
- 9. 在python中管理大數據結構
- 10. C++內存緩存數據結構
- 11. 結構管理
- 12. 管理結構數組vb.net
- 13. 使用內存中的數據結構
- 14. Python數據結構的內存大小
- 15. 個人malloc函數,使用數據結構來處理內存
- 16. 大型數據結構操作/處理中的內存使用
- 17. 小內存管理器
- 18. 探索內存管理器
- 19. 內存管理+容器
- 20. 服務器內存管理
- 21. 如何管理C中結構的內存?
- 22. 核心數據內存管理
- 23. 核心數據 - 內存管理?
- 24. 核心數據內存管理
- 25. 導入數據時vtk內存管理
- 26. 管理動態語言數據的數據庫結構
- 27. 個人管理器的XML結構
- 28. Java:數據結構內存估計
- 29. Untar文件到內存數據結構
- 30. 核心數據和內容管理器
請問爲什麼它比OS提供的分配方案更好?看起來像一個完全浪費的內存預先分配內存塊,你不知道它們是否將被用於... –
@RafaelDazcal一些應用程序只是做到這一點,因爲操作系統可能不可靠,例如Mozilla Firefox – Kupto
@RafaelDazcal這將比malloc更快 – linuxfreak