哪一个更快

本文关键字:哪一个 | 更新日期: 2023-09-27 17:57:48

(编辑:b是现有布尔值)

是否

b = (a > c);

比快

if (a > c)
    b = true;
  • 一般来说
  • 考虑到在我的情况下(a>c)在大多数时候都是假的这一事实

edit:我知道收益会很小,即使这部分代码会被执行很多次。但我仍然对理论答案感兴趣。

感谢

哪一个更快

正如Darin所说,你应该使用任何对你来说更可读的东西,如果有,速度差将是微不足道的。。。但值得注意的是,它们并不等同。如果这是在一个方法中(因此b是一个局部变量),则第一种方法将使b明确分配,而第二种方法则不会。

就我个人而言,我只会使用:

bool b = a > c;

我认为不需要额外的括号,我更喜欢在声明时初始化。如果我确实使用了if块,我肯定会使用大括号。。。

在这里谈论更快在实践中没有意义,因为这是一个不应该做的微观优化。至于你应该使用这两个中的哪一个,请使用你更可读的一个(第一个对我来说似乎更可读)。

第二个完全没用。变量之后不会被明确赋值。因此,你无法阅读它,需要在使用之前重新分配它,这会覆盖你的分配结果。

但我不会担心这种微观优化,除非真的有必要。在这种情况下,无论如何都需要对生成的程序集代码进行评测和检查。

AFAIK如果分配给引用类型字段(而不是局部变量),则类似于此的优化是有意义的。由于引用字段的分配有一些与GC交互相关的额外成本。但与局部变量I无显著差异。在某些情况下,赋值可能会稍微快一些,因为如果分支预测失败,条件语句会有问题。

除了其他答案中提到的错误之外,在像C#这样的托管语言中,这些优化绝对没有用处。在对代码进行实际评估之前,有很多层的翻译。这样的优化只有在Assembly或Ye-OldeC++中才有意义。

好吧,第二个版本会占用硬盘上更多的内存(如果我们不考虑优化等),即文件会更大。

第一个是这样的:

  1. a > b存储在x
  2. mov b,x

第二个是这样的:

  1. a > b存储在x

  2. x是真的吗?

    是:

  3. b = true

  4. 继续执行

    否:

  5. 继续执行