3

使用 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

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

感谢您的任何想法

4

1 回答 1

5

没有看到有问题的代码真的很难指出问题出在哪里,但是 _fini 时间建议使用全局变量(或在程序期间也存在的静态函数变量)的析构函数。我建议-您检查所有全局+静态变量的类并查看它们的析构函数在做什么-注释掉程序中的功能,直到停止发生,以提示您在哪里花费时间-使用 gdb 或另一个调试器来检查 _fini 发生了什么。

于 2012-08-08T23:23:57.980 回答