用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
花费这么多时间?
我不能粘贴我的粘贴,因为它很长,我没有发现问题。
感谢您的任何想法
答案 0 :(得分:5)
没有看到有问题的代码真的很难说明问题在哪里,但_fini时间建议全局变量的析构函数(或者在程序期间也存在的静态函数变量)。我会建议 - 检查所有全局+静态变量的类,并查看它们的析构函数正在做什么 - 评论你的程序中的功能,直到停止发生,以提示你花时间在哪里 - 使用gdb或其他调试器来检查_fini发生了什么。