我学习使用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,你应该知道它的缺点:http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 – 2010-06-13 13:17:20
好文本。非常感谢:D – arthurprs 2010-06-13 14:57:53