Я учился использовать 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)
Если я вызову один, то дварезультат обратный, два занимает больше времени, чем один
обе функции одинаковы, но первый вызов всегда занимает меньше времени, чем второй
Почему это так?
Примечание:код сборки точно такой же, и код компилируется без оптимизации