什么是更快(x <0)或(x ==
变量x
值为int,可能的值为: -1, 0, 1, 2, 3
。 哪个表达式会更快(在CPU ticks中):
1. (x < 0)
2. (x == -1)
语言:C / C ++,但我想所有其他语言都会有相同的。
PS我个人认为答案是(x < 0)
。
对于大师来说更广泛:如果x
从-1
到2^30
怎么办?
这完全取决于您编译的ISA以及编译器优化器的质量。 不要过早优化: 首先找到您的瓶颈 。
这就是说,在x86中,你会发现在大多数情况下两者速度都是相同的。 在这两种情况下,您都会有一个比较( cmp
)和一个条件跳转( jCC
)指令。 但是,对于(x < 0)
,可能会出现一些情况,编译器可能会忽略cmp
指令,从而加快您的代码整个周期。
具体来说,如果值x
存储在一个寄存器中,并且最近是一个算术运算(例如add
或sub
,但有更多的可能性)将EFLAGS寄存器中的符号标志SF置位,那么就没有必要对于cmp
指令,编译器只能发出一条js
指令。 当输入为-1时,没有简单的jCC
指令可以跳转。
为什么? 无论你做什么,编译器都会在你正在编译的任何平台上优化它。
如果您需要检查它是否为-1,请使用(x == -1),如果您想知道它是否小于零,请改用它。 写下你会大声朗读的内容。
这样的微小事情不会让事情变得更快,你应该担心可读性和干净的设计,而不是更快的操作。
即使它没有做任何逻辑改变,机会也在你的平台上, 两者都将在一个CPU周期内执行 。
试试看看! 做一百万,甚至更好,每个亿十亿次,并且记下它们。 我敢打赌,你的结果没有统计学意义,但是谁知道 - 也许在你的平台和编译器上,你可能会发现一个结果。
这是一个很好的实验,可以让你相信,过早的优化可能不值得你花时间 - 而且很可能是“万恶之源 - 至少在编程中”。
链接地址: http://www.djcxy.com/p/31557.html