我學習使用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