我的问题非常基本.在C或C++中:
让我们说for循环如下,
for(int i=0; i<someArray[a+b]; i++) {
....
do operations;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否a+b对每个for循环执行计算,或者仅在循环开始时计算一次?
根据我的要求,值a+b是不变的.如果a+b计算并且someArray[a+b]每次在循环中访问该值,我将使用临时变量someArray[a+b]来获得更好的性能.
您可以在查看生成的代码时找到答案
g++ -S file.cpp
Run Code Online (Sandbox Code Playgroud)
和
g++ -O2 -S file.cpp
Run Code Online (Sandbox Code Playgroud)
查看输出file.s并比较两个版本.如果someArray[a+b]可以将所有循环周期减少到一个常量值,优化器通常会这样做并将其拉出到临时变量或寄存器中.
它的行为就像每次都被计算一样。如果编译器正在优化并且能够证明结果没有改变,则可以将计算移出循环。否则,每次都会重新计算。
如果确定结果是恒定的,并且速度很重要,请使用变量对其进行缓存。
| 归档时间: |
|
| 查看次数: |
3906 次 |
| 最近记录: |