添加与ORing性能

jef*_*yer 9 c bit-manipulation addition compiler-optimization

我看到人们使用加法,其中按位OR在概念上更合适,因为他们认为它更快.这是真的?如果是的话,所有现代编译器都知道这个技巧吗?

Gre*_*ill 5

加法和逻辑OR都可能在CPU的ALU的类似部分中执行.不太可能存在任何可测量的性能差异,但这可以在您的情况下进行测量以确定.

编译器不需要为此烦恼,因为通常编译器可以知道添加和ORing将给出相同结果的唯一方法是操作数是常量,并且在这种情况下编译器可以简单地在编译时执行算法而不是甚至必须为它生成代码.


cHa*_*Hao 3

“概念上合适”和“更快”是两个不同的东西。前者是语义,而后者往往涉及破坏语义。

至于标题中的问题,速度方面的差异很小(如果有的话)。实际发生这种情况的 CPU 编译器通常会对其进行优化 -如果它不会导致不同的结果,那么它很可能并且通常会导致不同的结果。

正确编写你的代码——如果你的意思是“或”,那么“或”。如果添加与或最终变得更快,您的编译器会为您完成它,或者您可以在确定每次迭代潜在的额外半纳秒是否值得以可读性和错误等为代价更改它改变可能会导致。

  • 编译器不太可能为您将其中一种转换为另一种 - 这需要对程序对变量的使用有一些详细的了解。 (2认同)