为什么我的程序在_fini中占用了85%的CPU周期?

时间:2012-08-01 21:55:39

标签: c++ gcc destructor oprofile

用oprofile分析我的程序后,我有点意外。

该个人资料显示我的计划在_fini中花费了85%:<​​/ p>

  

CPU:Intel Core / i7,速度1199 MHz(估计)计数   CPU_CLK_UNHALTED事件(未停止时的时钟周期)与单位   掩码0x00(无单位掩码)计数100000个样本%图像名称   符号名称553519 85.7402 eddic _fini

其他符号看起来不错。

我的程序是用GCC 4.7编译的。

根据我的理解,符号_fini是一个全球销毁的弃用构造,所以我不明白为什么我的程序在这个符号上花了这么多时间。

这可能是由于oprofile或GCC配置错误造成的吗?

我试图分析未经优化的代码,但问题并不存在。没有这样的符号没有优化。

有没有办法修复个人资料或避免在_fini花费这么多时间?

我不能粘贴我的粘贴,因为它很长,我没有发现问题。

感谢您的任何想法

1 个答案:

答案 0 :(得分:5)

没有看到有问题的代码真的很难说明问题在哪里,但_fini时间建议全局变量的析构函数(或者在程序期间也存在的静态函数变量)。我会建议   - 检查所有全局+静态变量的类,并查看它们的析构函数正在做什么   - 评论你的程序中的功能,直到停止发生,以提示你花时间在哪里   - 使用gdb或其他调试器来检查_fini发生了什么。