什么是更快(x <0)或(x ==

变量x值为int,可能的值为: -1, 0, 1, 2, 3 。 哪个表达式会更快(在CPU ticks中):

1. (x < 0)
2. (x == -1)

语言:C / C ++,但我想所有其他语言都会有相同的。

PS我个人认为答案是(x < 0)

对于大师来说更广泛:如果x-12^30怎么办?


这完全取决于您编译的ISA以及编译器优化器的质量。 不要过早优化: 首先找到您的瓶颈

这就是说,在x86中,你会发现在大多数情况下两者速度都是相同的。 在这两种情况下,您都会有一个比较( cmp )和一个条件跳转( jCC )指令。 但是,对于(x < 0) ,可能会出现一些情况,编译器可能会忽略cmp指令,从而加快您的代码整个周期。

具体来说,如果值x存储在一个寄存器中,并且最近是一个算术运算(例如addsub ,但有更多的可能性)将EFLAGS寄存器中的符号标志SF置位,那么就没有必要对于cmp指令,编译器只能发出一条js指令。 当输入为-1时,没有简单的jCC指令可以跳转。


为什么? 无论你做什么,编译器都会在你正在编译的任何平台上优化它。

如果您需要检查它是否为-1,请使用(x == -1),如果您想知道它是否小于零,请改用它。 写下你会大声朗读的内容。

这样的微小事情不会让事情变得更快,你应该担心可读性和干净的设计,而不是更快的操作。

即使它没有做任何逻辑改变,机会也在你的平台上, 两者都将在一个CPU周期内执行


试试看看! 做一百万,甚至更好,每个亿十亿次,并且记下它们。 我敢打赌,你的结果没有统计学意义,但是谁知道 - 也许在你的平台和编译器上,你可能会发现一个结果。

这是一个很好的实验,可以让你相信,过早的优化可能不值得你花时间 - 而且很可能是“万恶之源 - 至少在编程中”。

链接地址: http://www.djcxy.com/p/31557.html

上一篇: What is faster (x < 0) or (x ==

下一篇: '<=' versus '<' in for loop