【发布时间】:2011-03-03 00:51:21
【问题描述】:
我正在学习使用 gprof,然后我得到了这段代码的奇怪结果:
int one(int a, int b)
{
int i, r = 0;
for (i = 0; i < 1000; i++)
{
r += b / (a + 1);
}
return r;
}
int two(int a, int b)
{
int i, r = 0;
for (i = 0; i < 1000; i++)
{
r += b / (a + 1);
}
return r;
}
int main()
{
for (int i = 1; i < 50000; i++)
{
one(i, i * 2);
two(i, i * 2);
}
return 0;
}
这是分析器的输出
% cumulative self self total
time seconds seconds calls us/call us/call name
50.67 1.14 1.14 49999 22.80 22.80 two(int, int)
49.33 2.25 1.11 49999 22.20 22.20 one(int, int)
如果我调用一个然后两个结果是相反的,两个比一个花费更多的时间
两者都是相同的功能,但第一次调用总是比第二次花费更少的时间
这是为什么呢?
注意:汇编代码完全相同,并且代码正在编译,没有优化
【问题讨论】:
-
这些差异非常小,可能是由多种原因造成的。如果你正在学习使用 gprof,你应该知道它的缺点:stackoverflow.com/questions/1777556/alternatives-to-gprof/…
-
好文。非常感谢:D
标签: c++ performance profiler gprof