【问题标题】:In loops, does this matter?在循环中,这重要吗?
【发布时间】:2010-02-07 06:26:21
【问题描述】:

一个

while( x < 100 ) {
if( x == 1 ) { echo "Hello World!" } else { echo "Bottles" }
x++;
}

B

while( x < 100 ) {
if( x != 1 ) { echo "Bottles" } else { echo "Hello World!"}
x++;
}

有这么大的循环真的会有所作为吗?

【问题讨论】:

  • 我看不出有什么区别,每个循环都有 100 个循环和 1 个条件检查!
  • 我假设这是一个简化的示例,因为很明显,如果这是真正的代码,您应该将 if 移到循环之外。回声“hello world”,然后是 99 瓶。

标签: php loops


【解决方案1】:

这可能不会有什么不同。

我会选择第二个,因为x != 1x == 1 更常见

这可能会转化为千分之一毫秒的超微小性能提升,但微优化并不那么重要。

【讨论】:

  • 为了可读性,我实际上会选择第一个。如果你有很多否定条件,使用它们可能会令人困惑。
【解决方案2】:

您不太可能注意到任何差异,而且几乎可以肯定还有更大的瓶颈需要担心。

【讨论】:

    【解决方案3】:

    在典型的 CPU 上,B 可能会更快,因为 A 的分支预测可能会搞砸。当然,假设编译器没有优化。

    顺便说一句,您是否测量过它并发现其中一个明显优于另一个?

    【讨论】:

    • 除非这是 php,其中 CPU 分支预测不是一个因素。
    • 这只是理论上的。除非我们对其进行测量,否则您永远无法判断哪个会更快,即使那样我们仍然无法确定。而且,无论如何,很难预测分支预测器会做什么:-)
    【解决方案4】:

    我假设 x 从 1 开始。如果不是这样,这不一定是可能的。

    echo "Hello, World!";
    while(x < 99) { echo "bottles"; x++; }
    

    为什么要打扰条件,你知道你必须这样做?

    【讨论】:

    • 您的代码断言 x 开头为 1。这个怎么样? while(x
    【解决方案5】:

    这取决于您的优化器将如何处理您的循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2012-05-26
      • 2016-11-17
      • 1970-01-01
      相关资源
      最近更新 更多