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

标签 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

最佳答案

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

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

总而言之,仅在需要时进行优化(因此您会发现存在时间/内存问题)。在日常生活中,更喜欢可读性强、易于理解的代码。

关于c - `for`循环测试表达式中的数学运算-性能、优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46831571/

相关文章:

java - Jav8 : Computing Elapsed time for Timestamp

javascript - 意识到 Javascript 表示数组的独特方式的排序

performance - 如何在 Heroku 上重置 pg_stat_user_tables? (pg_stat_reset() 需要 super 用户)

java - 将 Java 对象设置为 null 还会有什么作用吗?

c++ - 带有内存大小定义的 header

c - 如何限制 printf 小数点后显示的位数?

c++ - 有没有一个gcc命令可以链接同一目录下的所有.o文件并生成一个.exe文件?

c - 没有从文件中获取 token ?

c - 如何测试 C 函数是否可链接

c# 字符串性能 - 比较字符串文本或字符串长度哪个更快