c++ - 如何衡量管理内存所花费的时间

标签 c++ c memory-management metrics

reddit thread引起了我对自定义内存分配器的注意。例如,用户 Rohmboid 说:

People wouldn't be writing their own pool allocators it if there wasn't a clear benefit.

他们怎么知道有一个?

如果花在管理内存上的时间只占我程序持续时间的不到 1%,我不想浪费我的时间/金钱/精力来编写自定义分配器。我也不想切换到自定义分配器而无法判断加速。所以我想知道:我如何衡量(或至少估计)分配/释放/获取内存所花费的时间?

最佳答案

How do I know there is one?

分析您的代码。

优化代码中非热路径的内容毫无意义。

如果分配器 (A) 占用了 5% 的 CPU 时间,而您的应用占用了另外 95%,将分配器加速两次可以得到 (5/2)/100 = 2.5%促进。现在尝试将 B 的速度提高一小部分。

如何?

最简单的方法是使用IDE内置的profiler; MSVS 一个相当不错,尽管我使用的是 Intel VTune;它的易用性非常好,它只是向您展示 - 此处优化。

使用分析程序有额外的好处;你根本不需要修改你的代码;当您想要更改分析选项并再次运行时,您也不必重新编译。也就是说,您的应用程序中的计时器也可以提供不错的结果,尽管它们很少需要直接放置在分配器中。最好不断缩小程序可能花费最多时间的地方。

关于c++ - 如何衡量管理内存所花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050572/

相关文章:

c++ - 唤醒 asio 截止时间计时器

c - 为什么它给出错误的数组大小

c - 在 C 中为 char 数组赋值不起作用

linux - Linux 内核中的 realloc() 是否有以下限制?

c++ - 如果 vtable 是在编译时创建的,为什么这个错误是链接器错误而不是编译错误?

c++ - 在 C++ 中使用 POCO 和 cereal 反序列化多个对象

c++ - "placement new"有什么用途?

c - 从文件的前 N ​​个文件中读取数字

c# - 一个对象及其依赖项使用的内存

java - 使用 Java 按顺序编写大型 PDF