如果您在Windows上使用C++开发内存密集型应用程序,您是否选择编写自己的自定义内存管理器以从虚拟地址空间分配内存,或者允许CRT控制并为您执行内存管理?我特别关注堆上小对象的分配和释放造成的碎片.因此,我认为只要有足够的内存但是碎片化,这个过程就会耗尽内存.
我认为最好的办法是在配置文件证明 CRT以损害应用程序性能的方式破坏内存之前不要实现.CRT,核心操作系统和STL人员花了很多时间考虑内存管理.
您的代码很可能在现有分配器下执行得非常好,无需进行任何更改.肯定有更好的机会,而不是你第一次获得内存分配器.我之前已经为类似情况编写了内存分配器,这是一项艰巨的任务.不那么令人惊讶的是,我继承的版本充斥着碎片问题.
等到配置文件显示出问题的另一个好处是,您还将知道您是否确实修复过任何问题.这是性能修复中最重要的部分.
只要您使用标准集合类和算法(例如STL/BOOST),就不应该很难在周期中插入新的分配器来修复需要的代码库部分.固定.您不太可能需要为整个程序使用手动编码分配器.