我有这个程序需要 2.34 秒才能运行,而 gprof 说它只需要 1.18 秒。我在其他地方读过答案,表明如果程序受 I/O 限制,gprof 可能会出错,但这个程序显然不是。
对于我正在尝试分析的有用程序,也会发生这种情况。它并不特定于这个简单的测试用例。
(另外,在这种情况下,gprof 表示 main() 占用了超过 100% 的程序运行时间,这是一个非常愚蠢的错误,但并没有真正给我带来问题。)
$ cat test.c
int main() {
int i;
for (i=0;i<1000000000;i++);
}
$ gcc test.c -o test
$ time ./test
real 0m2.342s
user 0m2.340s
sys 0m0.000s
$ gcc test.c -o test -pg
$ time ./test
real 0m2.342s
user 0m2.340s
sys 0m0.000s
$ gprof test |head
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
101.33 1.18 1.18 main
% the percentage of the total running time of the
time program used by this function.
我建议放弃gprof
并切换到oprofile
。任何将检测插入到程序中的分析都会本质上影响性能,从而可能使结果出现偏差或无效。和oprofile
您不必构建具有分析支持的程序或获取特殊的支持分析的库;它通过统计方法工作,基本上对指令指针进行采样(在内核协助下)并使用样本计数来估计每个函数花费了多少时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)