用C ++查询内存池

时间:2012-01-16 13:35:38

标签: c++ memory pool dynamic-allocation

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

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

2 - 使用modified new();不分配内存的函数/运算符只获得指向内存池开头的指针。这样就可以动态创建对象而无需开销。

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

4 - 在第一个内存池中创建的对象留下来根据它们的大小来获取内存。第一个池中分配的内容与它在低位时返回的内容之间的差异将在删除时由对象恢复。

我担心的主要是因为我不知道如何删除比分配的内存池更小的内存池,保持心灵除了内存池对象的末尾还有一个操作系统头在池中分配的第一个对象之前的内存池。我需要采取什么方法来确保没有内存泄漏,删除多余的内存池将不会删除在其中分配的对象,并且安全地删除了内存池片段的标头。

谢谢!

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

1 个答案:

答案 0 :(得分:3)

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

请注意,如果您计划立即拆除整个事物,那么竞技场才真正有用;如果您希望从已删除的对象中回收内存以便重复使用,那么您最终会将自己的堆写在竞技场顶部。如果您只想保持竞技场块的存活直到最后一个对象被释放,您可以使用引用计数进行管理。

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