使用gperftools的heap profiler来分析libc malloc

时间:2018-05-25 19:08:15

标签: c++ malloc libc tcmalloc gperftools

我正在尝试使用不同的分配策略来分析应用程序以比较其性能。

使用tcmalloc时我可以毫无困难地分析它,但是如何使用libc的分配函数对其进行分析?实际上,启用gperftool的堆分析器需要使用trait MyTrait {} impl<T> MyTrait for T where T: Fn() -> &'static str, { } impl<T> MyTrait for T where T: Fn(u8) -> u8, { } fn myf<F>(_fun: Box<F>) where F: MyTrait, { } fn main() { myf(Box::new(|i: u8| i + 2)) } 标志¹,但这会导致tcmalloc被用作分配策略。

1 个答案:

答案 0 :(得分:0)

  

如何使用libc的分配函数对其进行分析?

注意:这个要求有点奇怪:它不像你的应用程序突然开始使用更多或更少的堆内存,或者当你从tcmalloc切换到GLIBC malloc时改变它的分配模式或站点。

来自https://gperftools.github.io/gperftools/heapprofile.html

  
    

堆分析需要使用libtcmalloc。可以在堆分析器的未来版本中删除此要求,并将堆分析器分离到其自己的库中。

  

所以你可以

  • 等待Google开发人员删除此要求(这可能是等待几天或几年 - 我不知道。实际上,看起来上面的github.io页面还没有更新从2012年开始,所以我不会屏住呼吸,或者
  • 自己提供分离所需的代码,或
  • 找到使用GLIBC执行此操作的等效方法(并可能将该代码提供给GLIBC)。

我不知道现有的任何现有GLIBC等效物。