我有一个C代码,我正在玩英特尔的VTune,我运行了 General Exploration analysis并且不知道如何解释结果.它标记为 Retire Stalls的问题. 就这一点来说,这足以让我感到困惑,因为我可能已经在脑海中
就这一点来说,这足以让我感到困惑,因为我可能已经在脑海中了.但它列出的具有异常退休停顿数量的函数是_int_malloc和malloc_consolidate,两者都在libc中.所以我甚至不能看到我自己的代码,并试图弄清楚它并不是我真正开始改变的东西.
有没有办法使用该信息来改进我自己的代码?或者它真的只是意味着我应该找到更少或更少分配的方法吗?
(注意:手头的具体代码不是问题,我正在寻找解释数据的策略,并在热点或档位或在我的控件之外的代码中可能出现“问题”时改进一些事情)
Is there a way to use that information to improve my own code? Or does
it really just mean that I should find ways to allocate less or less
often?
是的,听起来你应该对代码进行更改,以便不经常调用malloc.
>堆分配真的有必要吗?
>是否有可以重复使用的缓冲区?
>使用memory pool是一个选项吗?
>你可以做堆叠分配吗?例如,如果是那样的话
数组,你碰巧知道那些数组的最大大小
编译时间?
根据您的应用程序,内存分配可能很昂贵.我曾经通过从紧密循环中删除内存分配,使程序速度提高了20倍. Linux上的应用程序并不是那么慢,但它在Windows上是一场灾难.我的更改后,在Windows上也可以.