1

我正在写一个内存管理器。我分配了一大块动态内存并将其拆分为各种大小的内存池。大小范围从 8 到 256,是 8 的倍数。当内存请求到来时,根据大小,我从其中一个池中分配一个内存块。我维护一个映射所需大小和内存池的哈希表。
我不想在分配的内存中保留簿记信息,因此我为每个池使用一个单链表来跟踪空闲块。我的问题是 i) 由于内存池中所有块的块大小是统一的,我决定不对这些块进行排序。即当内存请求到来时,我将分配内存池中的第一个块,当它被释放时,我将它插入到空闲列表的前面。这样,内存分配和释放都会更快。此外,由于池中的块大小相同,因此不会发生碎片。你觉得这有什么问题吗?

4

1 回答 1

1

是的,拥有一个 LIFO 堆栈来保存大小相同的未使用内存块是最简单的解决方案。我自己曾经做过一次这样的事情......

我只会给你一个建议。像这样分配内存时,不要给出指向分配区域开头的指针。哦,最好有另一个堆栈来推送分配的块,这样你就知道它们是什么了。

于 2013-04-02T09:47:57.300 回答