关于C++中内存池的查询

An inquiry on memory pools in C++

本文关键字:查询 内存 C++ 关于      更新时间:2023-10-16

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

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

2-使用修改后的new();不分配内存的函数/运算符只获取一个指向内存池开头的指针。通过这种方式,可以在没有开销的情况下动态创建对象。

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

4-在第一个内存池中创建的对象将根据其大小来提取内存。在第一个池中分配的内容和在池电量不足时返回的内容之间的差异由对象在删除时恢复。

我担心的主要是,我不知道如何删除比分配的内存池小的内存池,记住,除了内存池对象末尾剩下的内容外,还有一个内存池的操作系统头,它位于池中分配的第一个对象之前。我需要什么方法来确保没有内存泄漏,删除多余的内存池不会删除其中分配的对象,并且安全地删除内存池片段的头。

谢谢!

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

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

请注意,只有当你计划一次拆除整个东西时,竞技场才真正有用;如果您希望从已删除的对象中回收内存以供重用,那么您最终会在竞技场的顶部编写自己的堆。如果你只想保持arena区块的活力,直到最后一个对象被释放,你可以用refcount来管理。

其次,我所知道的分配内存的唯一常见方法是使用内存映射:这是特定于平台的。