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

Bap*_*cht 3 c++ gcc destructor oprofile

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

该个人资料显示我的计划花费85%_fini:

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

其他符号看起来不错.

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

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

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

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

有没有办法修复配置文件或避免花费这么多时间_fini

我不能粘贴我的粘贴非常长,我没有找出问题所在.

谢谢你的想法

csd*_*csd 5

没有看到有问题的代码真的很难说明问题所在,但_fini时间表明全局变量的析构函数(或者在程序期间也存在的静态函数变量).我建议 - 你检查所有全局+静态变量的类,看看他们的析构函数正在做什么 - 在程序中注释掉功能,直到停止发生,给你一个花费时间的地方 - 使用gdb或者另一个调试器来检查_fini发生了什么.

  • 可能是因为你的程序符号不完整而且oprofile是错误报告过去_fini但没有公共符号作为_fini的一部分的代码? (2认同)