我正在寻找编写一个自我碎片整理内存管理器,其中一个简单的递增堆分配器与一个简单的压缩碎片整理程序结合使用。
粗略的方案是从最低内存地址开始向上分配块,并保持簿记信息从最高内存地址开始向下工作。
内存管理器会传回智能指针——boost 的 intrusive_ptr 对簿记结构来说似乎是最明显的,然后它们本身会指向实际的内存块,从而提供一定程度的间接性,以便可以轻松地移动块。
碎片整理程序将从“生成”书签开始压缩堆以加快进程,并且一次只对固定数量的内存进行碎片整理。指向块本身的原始指针在下一次碎片整理之前一直有效,因此可以自由传递,直到提高性能为止。
对此的具体应用是控制台游戏编程,因此在每一帧的开始或结束时,可以相对安全地完成碎片整理。
所以我的问题是,是否有人将这种分配方案与 STL 结合使用,它是否会像我怀疑的那样完全摧毁 STL。我可以看到 std::list< intrusive_ptr > 在 intrusive_ptr 级别上工作,但是 stl 列表节点本身的分配是否存在以覆盖下一个/上一个指针本身是 intrusive_ptr 或者我只是必须有一个标准堆分配器与这个更动态的分配器并驾齐驱。