【发布时间】:2013-02-24 09:55:50
【问题描述】:
reddit thread 引起了我对自定义内存分配器的注意。例如,用户 Rohmboid 说:
如果有的话,人们就不会编写自己的池分配器了 没有明显的好处。
他们怎么知道有一个?
如果花在管理内存上的时间只占程序持续时间的不到 1%,我不想浪费我的时间/金钱/精力来编写自定义分配器。我也不想切换到自定义分配器并且无法判断加速。所以我想知道:我如何衡量(或至少估计)分配/释放/获取内存所花费的时间?
【问题讨论】:
-
您是否尝试过使用分析器?
-
就我参与的最新项目个人而言,我们假设我们需要一个用于将有大量分配的系统。经过测试,我们认为很难在小分配上击败普通的旧
new。似乎(至少在 Windows 7 上的 VS2010 中)重复的小分配速度非常快。 -
人们编写自定义分配器并不是为了让它们更快,而是为了更有效地管理内存。
-
@MichaelFoukarakis 这通常会使程序更快。
-
@BartekBanachewicz 一个简单的专用分配器很少比通用的
malloc/new慢,没错,但在某些圈子中,主要动机是减少空间开销和减少碎片。事实上,这就是池分配器比性能更好的地方(没有每个块的空间开销;无论分配历史如何,空间都可以 100% 使用)。
标签: c++ c memory-management metrics