我正在学习如何使用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)
如果我先调用one再调用two,结果会相反,two的执行时间比one长。这两个函数是一样的,但第一次调用one的时间总是比第二次调用two的时间短。
为什么呢?
注意:汇编代码完全相同,且代码未启用任何优化。