数学运算在`for`循环的测试表达式中 - 性能,优化

时间:2017-10-19 13:52:09

标签: c performance

我感兴趣的是,for循环测试表达式的哪些形式更正确(从性能和良好代码实践的角度来看):

for(i = 0; i < size - 1; i++) {
    do something
}

int decreased_size = size - 1;
for(i = 0; i < decreased_size; i++) {
    do something
}

第一个示例中每次都计算测试表达式size - 1,还是编译器将其优化为常量值,因此无需创建其他变量decreased_size

我一直在创建一个额外的变量,但是现在,看看Codeforces上的其他变量,我怀疑 - 它是否有意义?

编译器:GCC版本5.4.0 20160609

2 个答案:

答案 0 :(得分:2)

没有人比其他人更有意义。实际上,通过优化,它会生成相同的代码:https://godbolt.org/g/vzVJVF

其次,在大多数情况下,size-1所消耗的时间与循环中的动作消耗的时间相比可忽略不计,因此优化此部分对系统的影响非常小。

总之,只在需要时进行优化(因此您会发现存在时间/内存问题)。在每一天,都喜欢一个易读且易于理解的代码。

答案 1 :(得分:0)

我同意@ Garf365。如果您同时查看https://www.tutorialspoint.com/assembly_programming/assembly_loops.htm,您会看到循环计数在循环开始之前加载到寄存器中,因此必须计算size-1并仅加载一次