1

是否可以创建一个遵循简单逻辑的内存池实现:

1 - 分配 n 字节的内存池。

2 - 使用修改后的 new(); 不分配内存的函数/操作符只获得一个指向内存池开头的指针。这种方式对象是动态创建的,没有开销。

3 - 当内存池不足时,它会释放剩余的内存并分配一个新的内存池

4 - 在第一个内存池中创建的对象将根据它们的大小来获取内存。在第一个池中分配的内容与在其不足时归还的内容之间的差异由对象在删除时恢复。

我的担心主要是因为我不知道如何删除小于分配的内存池,请记住,除了内存池对象末尾的内容之外,内存池还有一个 OS 标头那是在池中分配的第一个对象之前。我需要什么方法来确保没有内存泄漏,删除多余的内存池不会删除在其中分配的对象,并且安全地删除了内存池片段的标头。

谢谢!

编辑:请注意,目的是让内存池分配内存并由对象释放,这些对象可能具有不同的生命周期。如果这是可能的...

4

1 回答 1

3

首先,如果您想知道应该搜索什么,这听起来像是一个竞技场分配器(如评论中所述)。

请注意,仅当您打算立即拆除整个事物时,竞技场才真正有用;如果您希望从已删除的对象中回收内存以供重新使用,那么您最终会在竞技场顶部编写自己的堆。如果您只想让 arena-chunk 保持活动状态,直到最后一个对象被释放,您可以使用 refcount 进行管理。

其次,我知道分配内存的唯一常用方法是使用内存映射,以后可以在不移动的情况下缩小(如 realloc):这是特定于平台的。

于 2012-01-16T13:53:47.367 回答