一般来说(或者从您的经验来看),for循环和while循环在性能上有区别吗?
如果它们是双/三重循环,情况会怎样?
循环变量是否会影响g++或Intel编译器中向量化(SSE)的性能?
谢谢
一般来说(或者从您的经验来看),for循环和while循环在性能上有区别吗?
如果它们是双/三重循环,情况会怎样?
循环变量是否会影响g++或Intel编译器中向量化(SSE)的性能?
谢谢
这里有一份关于该主题的不错的论文,点击这里查看。
for
循环,因为它清楚地表明了您的循环变量在哪里被初始化和递增或递减。 - johnsywebfor
循环只是一种特定形式的while
循环的语法糖。VS2015,Intel Xeon CPU
long long n = 1000000000;
int *v = new int[n];
int *v1 = new int[2*n];
start = clock();
for (long long i = 0, j=0; i < n; i++, j+=2)
v[i] = v1[j];
end = clock();
std::cout << "for1 - CPU time = " << (double)(end - start) / CLOCKS_PER_SEC << std::endl;
p = v; pe = p + n; p1 = v1;
start = clock();
while (p < pe)
{
*p++ = *p1;
p1 += 2;
}
end = clock();
std::cout << "while3 - CPU time = " << (double)(end - start) / CLOCKS_PER_SEC << std::endl;
for1 - CPU时间 = 4.055
while3 - CPU时间 = 1.271
通过查看反汇编代码,这是很容易确定的。对于大多数循环来说,如果你做相同的工作,它们将是相同的。
int i = 0;
while (i < 10)
++i;
等同于
for (int i = 0; i < 10; ++i)
;
应该没有差别,但是请检查一下,因为我见过非常糟糕的旧版本GCC在ARM/Thumb代码之间创建不同的代码。其中一个优化了减法后比较以设置零标志位,而另一个则没有。非常糟糕。
再次嵌套应该没有影响。对于SSE/向量化等内容不确定,但我也不希望有任何差别。
这应该是可以忽略不计的。一个优化编译器应该使这种区别不存在。