c操作耗时0秒

c operation takes 0 seconds

我正在尝试测量串行程序反转数组所需的时间。我的代码:

#include <time.h>

int main() {
   int n = 100000;
   int c, d, a[n], b[n];
   clock_t start, end;

   for (c = 0; c < n ; c++)
      a[c] = c;

   start = clock();

   for (c = n - 1, d = 0; c >= 0; c--, d++)
      b[d] = a[c];

   end = clock();
   printf("Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC );

   return 0;
}

但是,它总是需要 0.000000 秒才能运行。为什么?如果我增加 n,我会收到分段错误。

循环:

   for (c = n - 1, d = 0; c >= 0; c--, d++)
      b[d] = a[c];

已被您的编译器优化掉。你的编译器发现 ba 没有在你的程序中进一步使用。

为避免编译器优化循环,您可以将 ba 作为参数传递给虚拟外部函数。您也可以使用 volatile 限定符,但这可能会使您的结果产生偏差。

尝试多次迭代:

#include <time.h>

int main() {
int n = 100000;
int c, d, a[n], b[n];
clock_t start, end;
start = clock();
for(int i =0; i< 100000000;i++) {
  for (c = 0; c < n ; c++)
   a[c] = c;
for (c = n - 1, d = 0; c >= 0; c--, d++)
  b[d] = a[c];
}
end = clock();
printf("Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC/100000000 );
return 0;
}

但最好阅读以下内容:C++ clock stays zero