我已经为堆分配编写了 ac/c++ 内存管理器(重载的 new/delete 和 malloc/realloc/free,基于 Doug Lea 的 malloc,但设计为免等待),并且似乎在碎片化方面遇到了一些问题。是否有任何好的资源可以详细说明通过管理器避免碎片化的好策略?
请注意,我无法重新排列已分配的内存(不使用带有 GUID 的智能指针)并且重写系统以使用池而不是堆分配是不可行的。
谢谢,
格兰特
我已经为堆分配编写了 ac/c++ 内存管理器(重载的 new/delete 和 malloc/realloc/free,基于 Doug Lea 的 malloc,但设计为免等待),并且似乎在碎片化方面遇到了一些问题。是否有任何好的资源可以详细说明通过管理器避免碎片化的好策略?
请注意,我无法重新排列已分配的内存(不使用带有 GUID 的智能指针)并且重写系统以使用池而不是堆分配是不可行的。
谢谢,
格兰特
您可能想从 jemalloc ( http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf ) 中获得一些灵感——这个分配器在新的 Firefox 中被明确使用,因为它具有抗碎片化功能。
看看像 glibc 这样更成熟的项目是如何做到的。
一个快速的谷歌找到了这个,有一堆参考资料。