这个reddit 线程引起了我对自定义内存分配器的注意。例如,用户 Rohmboid 说:
如果没有明显的好处,人们就不会编写自己的池分配器。
他们怎么知道有一个?
如果花在管理内存上的时间只占程序持续时间的不到 1%,我不想浪费我的时间/金钱/精力来编写自定义分配器。我也不想切换到自定义分配器并且无法判断加速。所以我想知道:我如何衡量(或至少估计)分配/释放/获取内存所花费的时间?
这个reddit 线程引起了我对自定义内存分配器的注意。例如,用户 Rohmboid 说:
如果没有明显的好处,人们就不会编写自己的池分配器。
他们怎么知道有一个?
如果花在管理内存上的时间只占程序持续时间的不到 1%,我不想浪费我的时间/金钱/精力来编写自定义分配器。我也不想切换到自定义分配器并且无法判断加速。所以我想知道:我如何衡量(或至少估计)分配/释放/获取内存所花费的时间?
我怎么知道有一个?
优化代码中不是热路径的东西是没有意义的。
如果分配器 (A) 占用了您 5% 的 CPU 时间,而您的应用程序占用了另外 95% 的时间,那么将分配器加速两次会给您(5/2)/100 = 2.5%
带来提升。现在尝试将 B 加速一小部分。
最简单的方法是使用 IDE 内置的分析器;虽然我使用的是 Intel VTune,但 MSVS 相当不错;它的易用性非常好,它只是向您展示 -在此处优化。
使用分析程序有额外的好处;您根本不必修改代码;当您想要更改分析选项并再次运行时,您也不必重新编译。话虽如此,应用程序中的计时器也可以提供很好的结果,尽管它们很少需要直接放置在分配器中。最好不断缩小程序花费最多时间的可能位置。