【问题标题】:Why is x = x+1 slower than x += 1?为什么 x = x+1 比 x += 1 慢?
【发布时间】:2015-08-15 18:08:48
【问题描述】:

我是一名 PHP 程序员。我总是更喜欢使用x += 1; 而不是x = x + 1;。

但我仍然不明白为什么人们说x += 1; 的执行速度比x = x + 1; 快​​。

(编者注:这个问题最初并未指定 PHP,因此 cmets 和答案都在谈论 C++ 编译器。)

【问题讨论】:

  • 谁告诉你存在性能差异?
  • 取决于编译器
  • 差异,如果有的话,取决于语言(许多语言将它们视为同义词,但不是全部) - 以及实现 这样的..
  • 如果这是 C++,那么所有的赌注都没有了。你可以重载操作符来做任何你想做的事——包括欺骗读者。
  • @Amit,在许多与性能和编程最佳实践相关的线程中。

标签: php performance increment


【解决方案1】:

http://3v4l.org/GjPvL/vld#tabs 会告诉你答案。

$x += 1; 被解释为 ASSIGN_ADD

$x = $x + 1; 有单独的添加和赋值操作,并使用临时变量。

操作码越少,运行速度就越快(在大多数情况下)。

请注意,如果您启用带有代码优化的 opcache,$x = $x + 1; 将被优化为使用 ASSIGN_ADD。

【讨论】:

    【解决方案2】:

    += 就是所谓的syntactic sugar。这对开发人员来说是一种方便。这两个语句在逻辑和性能上应该具有相同的结果。

    【讨论】:

    • 但是如果 x 是一个对象呢?
    • 如果语言和开发人员没有做任何太可疑的事情,x += y 和 x = x + y 应该做同样的事情。我确信有些语言可能会违反这一点。
    【解决方案3】:

    体面的编译器会接受这一点

    x = x +1
    x += 1
    x++
    

    要相同,最终编译相同的代码,因此没有区别。

    【讨论】:

    • 但是如果 x 是一个对象呢?
    • @ikegami 如果 x 是一个对象,并且实现它的人使得x = x+1 在 x 中产生的值与x += 1 不同,而两者都是“合法操作”,那么:A . 我很乐意声称这是一个可怕的设计决定。 B. 这不再是性能问题,因此与问题无关。如果结果是相同的,而性能却不是这样,那么我会很乐意说存在实施缺陷。
    猜你喜欢
    • 2019-08-02
    • 2013-08-29
    • 1970-01-01
    • 2010-12-04
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多