是否可以创建一个遵循以下简单逻辑的内存池实现:
1-分配n字节的内存池。
2-使用修改后的new();不分配内存的函数/运算符仅获得指向内存池开头的指针。这样可以动态地创建对象,而不会产生额外的开销。
3-当内存池耗尽时,它重新分配剩余的内存池,并分配一个新的内存池
4-在第一个内存池中创建的对象将根据其大小占用内存。在第一个池中分配的内容与当它耗尽时返回的内容之间的差异由对象在删除时恢复。
我担心的主要是这样一个事实,即我不知道如何删除比分配的内存池更小的内存池,请记住,除了内存池对象的末尾之外,在池中分配的第一个对象之前的内存池还有一个OS标头。我需要什么方法来确保没有内存泄漏,删除多余的内存池不会删除其中分配的对象,并确保内存池碎片的头被安全地删除。
谢谢!
编辑:请注意,意图是由内存池分配内存,并由对象释放内存,这可能具有不同的生存期。如果这是可能的.
发布于 2012-01-16 21:53:47
首先,这听起来像是一个竞技场分配器(正如评论中提到的),如果你想知道你应该搜索什么。
请注意,只有当您计划一次销毁整个对象时,arenas才真正有用;如果您希望从已删除的对象中回收内存以供重用,则最终只能在arena的顶部编写自己的堆。如果你只想让arena-chunk保持活动状态,直到最后一个对象被释放,你可以使用refcount来管理。
其次,我所知道的分配内存的唯一常见方法是使用内存映射:这是特定于平台的。
https://stackoverflow.com/questions/8880754
复制相似问题