【发布时间】:2009-03-07 15:48:33
【问题描述】:
我需要对程序进行概要分析,以查看是否需要对性能进行任何更改。我怀疑有必要,但首先测量是要走的路。这不是那个程序,但它说明了我遇到的问题:
#include <stdio.h>
int main (int argc, char** argv)
{
FILE* fp = fopen ("trivial.c", "r");
if (fp)
{
char line[80];
while (fgets (line, 80, fp))
printf (line);
fclose (fp);
}
return 0;
}
这是我用它做的:
% gcc trivial.c -pg -o trivial
% ./trivial
...
% gprof trivial gmon.out
诚然,这是一个微不足道的程序,但我原以为它会在分析雷达上产生某种影响。它没有:
called/total parents
index %time self descendents called+self name index
called/total children
0.00 0.00 1/1 __start [1704]
[105] 0.0 0.00 0.00 1 _main [105]
-----------------------------------------------
% cumulative self self total
time seconds seconds calls ms/call ms/call name
0.0 0.00 0.00 1 0.00 0.00 _main [105]
Index by function name
[105] _main
有人可以在这里指导我吗?我希望输出反映它至少调用了 fgets 和 printf 14 次,而且它确实击中了磁盘 - 当然应该有一些测量时间。
当我在真实程序上运行相同的命令时,我会列出更多函数,但即便如此,它也不是一个完整的列表 - 只是一个示例。
也许 gprof 不是正确使用的工具。是什么?
这是在 OS X Leopard 上。
编辑:我运行了真正的程序并得到了这个:
% time real_program
real 4m24.107s
user 2m34.630s
sys 0m38.716s
【问题讨论】: