我在写内存管理器。我分配一大块动态内存并将其分割成各种大小的内存池。大小范围从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. Python数据结构的内存大小
- 14. 使用内存中的数据结构
- 15. 个人malloc函数,使用数据结构来处理内存
- 16. 大型数据结构操作/处理中的内存使用
- 17. 小内存管理器
- 18. 内存管理+容器
- 19. 服务器内存管理
- 20. 探索内存管理器
- 21. 如何管理C中结构的内存?
- 22. 核心数据 - 内存管理?
- 23. 核心数据内存管理
- 24. 核心数据内存管理
- 25. 导入数据时vtk内存管理
- 26. 管理动态语言数据的数据库结构
- 27. 个人管理器的XML结构
- 28. Java:数据结构内存估计
- 29. 核心数据和内容管理器
- 30. 理想的数据结构
请问为什么它比OS提供的分配方案更好?看起来像一个完全浪费的内存预先分配内存块,你不知道它们是否将被用于... –
@RafaelDazcal一些应用程序只是做到这一点,因为操作系统可能不可靠,例如Mozilla Firefox – Kupto
@RafaelDazcal这将比malloc更快 – linuxfreak