优化libc中“问题”的代码

时间:2014-02-24 23:37:38

标签: performance optimization vtune

我有一个C ++代码,我正在使用英特尔的VTune,我运行General Exploration analysis并且不知道如何解释结果。它将Retire Stalls的数量标记为问题。

在它自己的身上,这足以让我感到困惑,因为我可能在我脑海里。但是,_int_malloc中列出的退休档位数量异常的函数为malloc_consolidatelibc。所以,我甚至不能看到自己的代码并尝试弄清楚它并不是我真正开始改变的东西。

有没有办法使用这些信息来改进我自己的代码?或者它真的只是意味着我应该找到更少或更少分配的方法吗?

(注意:手头的具体代码不是问题,我正在寻找解决数据的策略,并在热点或摊位或其他任何问题时改善一些问题" ;可能出现在我控制之外的代码中)

2 个答案:

答案 0 :(得分:5)

  

有没有办法使用这些信息来改进我自己的代码?或者   它只是意味着我应该找到分配更少或更少的方法   经常?

,听起来您应该在 代码中进行更改,以便不经常调用malloc。

  • 堆分配真的有必要吗?

  • 是否有可以重复使用的缓冲区?

  • 使用memory pool选项吗?

  • 您可以进行堆叠分配吗?例如,如果是那样的话 数组,你碰巧知道那些数组的最大大小 编译时间?

根据您的应用程序,内存分配可能很昂贵。我曾经通过从紧密循环中删除内存分配,使程序速度提高了20倍。 Linux上的应用程序并不是那么慢,但它在Windows上是一场灾难。我的更改后,在Windows上也没问题。

答案 1 :(得分:2)

  • 知道哪一行代码主要是调用malloc
  • 避免重复分配和解除分配
  • 可能与前一点一起使用线程本地存储
  • 编写你自己的分配器,它只在你告诉他时返回内存,否则将释放的内存块保存在列表中(使用list :: splice将列表元素从一个列表移动到另一个列表中)
  • 使用来自boost的分配器,它可能像前一个点一样使用