我正在写一个内存管理器。我分配了一大块动态内存并将其拆分为各种大小的内存池。大小范围从8到256,为8的倍数。当内存请求到来时,根据大小,我从其中一个池中分配一个内存块。我维护一个哈希表,映射所需的大小和内存池 我不想在已分配的内存中保留簿记信息,因此我每个池使用一个单独的链表来跟踪空闲块。 我的问题是 i)由于块大小在内存池中的所有块上是一致的,我决定不对块进行排序。即当一个内存请求到来时,我将在内存池中分配第一个块,当它被释放时,我会将它插入到空闲列表的前面。这样,内存分配和释放都会更快。此外,由于池中的块大小相同,因此不会发生碎片。你觉得这有什么问题吗?
答案 0 :(得分:1)
是的,拥有一个LIFO堆栈来保存大小相同的未使用的内存块是最简单的解决方案。我自己曾做过类似的事情......
我只会给你一个建议。在分配这样的内存时,不会发出指向已分配区域开头的指针。哦,最好让另一个堆栈在哪里推送已分配的块,这样你就知道它们是什么。