我希望编写一个自我碎片整理的内存管理器,它将使用简单的递增堆分配器和简单的紧凑式碎片整理器相结合。粗略的方案是从最低的内存地址向上分配块,并保持记录信息从最高的内存地址向下工作。内存管理器将返回智能指针——boost的intrusive_ptr似乎是最明显的——指向记录结构体,这些结构体本身则指向实际的内存块,从而提供了一定程度的间接性,以便可以轻松地移动块。
碎片整理器将从“代”标记开始压缩堆,以加快进程速度,并每次仅对固定数量的内存进行碎片整理。原始指向块本身的指针在下一次碎片整理之前有效,因此可以自由地传递,从而提高性能。
这种内存分配方案的特定应用是控制台游戏编程,因此在每个帧的开始或结束时,可以相对安全地进行碎片整理。
我的问题是,是否有人在STL中使用过这种分配方案,它会像我想的那样完全破坏STL吗?我可以看到std::list 在intrusive_ptr级别上工作,但是关于STL列表节点本身的分配,有没有办法覆盖next/prev指针使它们自己成为intrusive_ptr,或者我必须在这个更动态的方案旁边拥有一个标准堆分配器。
碎片整理器将从“代”标记开始压缩堆,以加快进程速度,并每次仅对固定数量的内存进行碎片整理。原始指向块本身的指针在下一次碎片整理之前有效,因此可以自由地传递,从而提高性能。
这种内存分配方案的特定应用是控制台游戏编程,因此在每个帧的开始或结束时,可以相对安全地进行碎片整理。
我的问题是,是否有人在STL中使用过这种分配方案,它会像我想的那样完全破坏STL吗?我可以看到std::list 在intrusive_ptr级别上工作,但是关于STL列表节点本身的分配,有没有办法覆盖next/prev指针使它们自己成为intrusive_ptr,或者我必须在这个更动态的方案旁边拥有一个标准堆分配器。