gpt4 book ai didi

c - C程序的时间测量为0

转载 作者:行者123 更新时间:2023-11-30 15:00:39 24 4
gpt4 key购买 nike

以下代码在代码块、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 函数有问题吗?或者说输出是对的?我还需要根据函数的多个输入大小和函数执行所需的时间绘制图表。 enter image description here

最佳答案

函数 sumN(i) 的调用已被优化(我猜你没有使用 -O0 进行编译),因为返回的值根本没有被使用。您可以在生成的程序集中看到它:

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

如您所见,在 gettimeofday 之间没有调用 sum(N)

使用返回值,不会被优化掉:

...
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!
...

关于c - C程序的时间测量为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41986260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com