Время измерения C программы 0

Следующий код был запущен в кодовых блоках компилятора gcc.

#include <sys/time.h>
#include<stdio.h>
int sumN(int n) {
int i,sum;
for(i=0; i<n; i++) {
    sum += i;
}
return sum;
}

int main() {
struct timeval stop, start;
int i;

for(i=0; i<10000;i+=100)
    {
        gettimeofday(&start, NULL);
        sumN(i);
        gettimeofday(&stop, NULL);
        printf("%d : %lu\n",i, stop.tv_usec - start.tv_usec);
    }
return 0;
}

и я получаю следующий вывод. Есть ли проблема с функцией gettimeofday? Или вывод правильный? Мне также нужно построить график на основе нескольких входных размеров для функции и времени, необходимого для выполнения функции.

1 ответ

Вызов функции sumN(i)оптимизирован (я думаю, вы не компилируете с -O0), потому что возвращаемое значение вообще не используется. Вы можете увидеть это в полученной сборке:

...
call    gettimeofday
xorl    %esi, %esi
movq    %rsp, %rdi
call    gettimeofday
...

как вы можете видеть, нет вызова sum(N)между gettimeofday,

Используйте возвращаемое значение, и оно не будет оптимизировано:

...
gettimeofday(&start, NULL);
res=sumN(i);
gettimeofday(&stop, NULL);
printf("%d : %d, %lu\n",i, res, stop.tv_usec - start.tv_usec);//print the result, avoiding optimization!
...
Другие вопросы по тегам