C++ for循环中的数组初始化是否比C+中的非for循环初始化慢+;

C++ for循环中的数组初始化是否比C+中的非for循环初始化慢+;,c++,arrays,for-loop,loop-unrolling,C++,Arrays,For Loop,Loop Unrolling,我想知道这个代码 for (int i=0; i <= n; i++) { someArray[i] = i; } 似乎如果没有编译器对此进行优化,for循环会变慢,因为它需要创建一个新变量i,检查条件语句并递增i。我想知道是否真的有一个编译器时间优化可以优化这样的场景。编译器可以进行循环展开以使其更快。请注意,这与循环展开相同。这称为循环展开,是编译器所做的事情。只需编写循环并相信优化器知道它在做什么(它甚至可以做向量化之类的事情)。如果你担心的话,你可以随时分析或查看组件。注

我想知道这个代码

for (int i=0; i <= n; i++)
{
    someArray[i] = i;
}

似乎如果没有编译器对此进行优化,for循环会变慢,因为它需要创建一个新变量
i
,检查条件语句并递增
i
。我想知道是否真的有一个编译器时间优化可以优化这样的场景。

编译器可以进行循环展开以使其更快。

请注意,这与循环展开相同。这称为循环展开,是编译器所做的事情。只需编写循环并相信优化器知道它在做什么(它甚至可以做向量化之类的事情)。如果你担心的话,你可以随时分析或查看组件。注意:有时候,循环是最好的方式。对于具有可预测条件的循环,CPU的分支预测器通常可以很好地处理;所有东西最终都会进入一个完全在一级缓存中的紧密循环,推测性执行意味着它的行为就像根本不是一个循环一样。相比之下,展开一个足够大的循环可能意味着你要移动更多的代码,避免用你从未支付过的分支成本来换取其他地方所需的额外总线带宽。谢谢各位,我应该投入一些时间来学习编译器的实际工作原理。实际上,这比“编译器如何工作”稍微复杂一点,嗯,以前从没听说过这个词。迷人的东西。非常感谢。
someArray[0] = 0;
someArray[1] = 1;
.
.
.
someArray[n] = n;