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 函数有问题吗?还是输出正确?我还需要根据函数的多个输入大小和函数执行所需的时间绘制图表。 在此处输入图像描述

4

1 回答 1

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!
...
于 2017-02-01T20:49:02.127 回答