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];
已被您的编译器优化掉。你的编译器发现 b
和 a
没有在你的程序中进一步使用。
为避免编译器优化循环,您可以将 b
和 a
作为参数传递给虚拟外部函数。您也可以使用 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
我正在尝试测量串行程序反转数组所需的时间。我的代码:
#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];
已被您的编译器优化掉。你的编译器发现 b
和 a
没有在你的程序中进一步使用。
为避免编译器优化循环,您可以将 b
和 a
作为参数传递给虚拟外部函数。您也可以使用 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