哪一个更快
本文关键字:哪一个 | 更新日期: 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++中才有意义。
好吧,第二个版本会占用硬盘上更多的内存(如果我们不考虑优化等),即文件会更大。
第一个是这样的:
- 将
a > b
存储在x
中 mov b,x
第二个是这样的:
-
将
a > b
存储在x
中 -
x
是真的吗?是:
-
b = true
-
继续执行
否:
-
继续执行