【问题标题】:Is there any performance difference between using > and >= in a loop [duplicate]在循环中使用 > 和 >= 之间是否有任何性能差异 [重复]
【发布时间】:2016-03-22 04:33:44
【问题描述】:

在循环中,我们不断终止条件,并在每次传递中检查这些条件。

我见过两种检查方法

1 . i > x i < x

第二个方法是

2 。 i >= x i <= x

在进行逻辑比较时,这两种方法是否有任何性能差异。

这两种操作所需的执行时间是否存在差异。即 > 和 >= ?

【问题讨论】:

  • 是的。第二个再做一次迭代。
  • 跟性能无关,跟逻辑有关。
  • @MarounMaroun 取决于你从哪里开始......
  • @YassinHajaj 这是真的。由于 OP 正在比较它们,我认为它们是相同的。
  • @sidgate 在 C 中,生成的用于与零比较的汇编代码是一个简单的符号检查指令(无论如何在 x86 处理器上),其中与其他值的比较必须实际比较。在 Java 中,JIT 可能会做同样的事情,但它不太可能有意义,因为您无法控制 JIT。

标签: java c loops conditional


【解决方案1】:

这两个语句之间非常几乎没有性能差异,但两个语句及其逻辑流程之间存在显着差异。

例如:

  • 如果您的循环一直运行到i <= 20,您将循环到i == 20
  • 如果您的循环一直运行到i < 20,您将循环到i == 19

如果您有一个条件要求您的迭代值在某个值之前停止,请确保选择最适合它的不等式。

但总的来说,如果此布尔语句的运行时间或性能有任何差异,则几乎不会引起注意。不应该围绕切换这些语句进行任何优化工作。*

*:另外,不要破坏Rule #1 of Optimization.

【讨论】:

  • 这两种操作所需的执行时间是否有差异。即 > 和 >=
  • 对于原始布尔表达式本身?如果有,它非常微不足道,如果您希望根据这种决定优化您的平台,还有其他领域你应该看看。
  • @vipinagrahari <<= 的执行时间相同。循环再迭代一次的执行时间当然直接受迭代时间的影响。
  • 当你回答一个问题时,你又被问到同样的问题,就像你甚至没有回答一样,这不是令人沮丧吗...
  • @paddy 对不起。但我实际上无法理解是否有任何实际差异。如果您能提供一些参考,那就太好了。
【解决方案2】:

不,这完全没有区别。当编译器将其转换为汇编时,它会将它们都转换为相同的cmp 指令。

【讨论】:

  • 你的意思是字节码,而不是汇编。
  • 不,我不知道。我的意思是组装。这被标记为 C。
  • 还有java,所以我想我们都是对的。
【解决方案3】:

有时您更喜欢使用<= 而不是<,例如在for 循环中,通常我们从0 转到length-1(例如,数组长度),我们使用<。但是如果你也想包含比较值,这里是y,并保持< 逻辑,你会得到

for (x=0 ; x<y+1 ; x++) {
    ...
}

这样做时

for (x=0 ; x<=y ; x++) {
    ...
}

保存+1 计算。

除此之外,大多数处理器同时具有 小于less 或等于 指令 - 因此使用其中一个或另一个对性能没有影响。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2012-12-15
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2014-08-03
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多