Joh*_*lak 2 comparison performance
什么通常更快:
if (num >= 10)
Run Code Online (Sandbox Code Playgroud)
要么:
if (!(num < 10))
Run Code Online (Sandbox Code Playgroud)
Joe*_*ams 25
编译器很可能会优化那种东西.不要担心,在这种情况下只需编码清晰.
汇编语言往往有操作>=和<=那些相同数量的步骤<和>.例如,用摩托罗拉68K,如果要比较的数据寄存器%d0和%d1如果和分支%d0大于或等于%d1,你会这样说:
cmp %d0, %d1 // compare %d0 and %d1, storing the result
// in the condition code registers.
bge labelname // Branch to the given label name if the comparison
// yielded "greater than or equal to" (hence bge)
Run Code Online (Sandbox Code Playgroud)
这是一个常见的错误,认为这a >= b意味着计算机将执行两个操作而不是一个操作,因为"或"在"大于或等于".
pax*_*blo 11
任何体面的编译器都会将这两个语句优化为完全相同的底层代码.实际上,它很可能会生成完全相同的代码:
if (!(!(!(!(!(!(!(num < 10))))))))
Run Code Online (Sandbox Code Playgroud)
只是因为它的意图似乎更清晰(轻度比你的第二个选择更清晰,我会选择第一个你的大量比怪物我上面贴更清晰).我倾向于考虑如何阅读它.想想这两句话:
我相信第一个更清楚.
实际上,只需测试"gcc -s"以获取汇编程序输出,两个语句都会生成以下代码:
cmpl $9,-8(%ebp) ; compare value with 9
jle .L3 ; branch if 9 or less.
Run Code Online (Sandbox Code Playgroud)
我相信你在浪费时间看这样的微优化 - 你会更加高效地看待算法选择等事情.那里的投资回报可能会大得多.
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |