为什么Clang优化掉了这段代码中的循环
#include <time.h>
#include <stdio.h>
static size_t const N = 1 << 27;
static double arr[N] = { /* initialize to zero */ };
int main()
{
clock_t const start = clock();
for (int i = 0; i < N; ++i) { arr[i] *= 1.0; }
printf("%u ms\n", (unsigned)(clock() - start) * 1000 / CLOCKS_PER_SEC);
}
而不是这段代码中的循环?
#include <time.h>
#include <stdio.h>
static size_t const N = 1 << 27;
static double arr[N] = { /* initialize to zero */ };
int main()
{
clock_t const start = clock();
for (int i = 0; i < N; ++i) { arr[i] += 0.0; }
printf("%u ms\n", (unsigned)(clock() - start) * 1000 / CLOCKS_PER_SEC);
}
(标记为C和C++,因为我想知道它们的答案是否不同。)
发布于 2015-10-22 11:44:38
如果x
为-0.0
,则x += 0.0
不是NOOP。不过,优化器无论如何都可以剥离整个循环,因为没有使用结果。一般来说,很难说优化器为什么会做出这样的决定。
https://stackoverflow.com/questions/33272994
复制相似问题