添加与ORing性能

时间:2011-04-04 01:23:13

标签: c bit-manipulation compiler-optimization addition

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

“概念上合适”和“更快”是两回事。前者是语义,而后者通常涉及破坏语义。

至于标题中的问题,速度上的差异很小(如果有的话)。实际发生这种情况的CPU的编译器通常会优化它 - 如果它不会导致不同的结果,它很可能并且通常会。< / p>

正确编写代码 - 如果你的意思是OR,那么OR。如果add-vs-OR最终变得更快,你的编译器会为你做这件事,或者你可以稍后更改它后你已经确定每次迭代的潜在额外半纳秒是否值得可读性的成本和这种变化可能导致的错误。

答案 2 :(得分:2)

事实上,编译器通常足够聪明,可以通过某种方式进行适当的替换。这种优化的术语是强度降低,这是本书中最古老的技巧。

答案 3 :(得分:0)

它通常不会更快,除非你知道你在偶数地址或价值上“加”1,否则它大多是错误的。