я учась использовать дргоЕ, а затем я получил странные результаты по этому коду:Странное поведение профилировщика: одни и те же функции, различные выступления
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 –
Хороший текст. Большое спасибо: D – arthurprs