我见过人们在概念上更适合逐位OR的情况下使用加法,因为他们认为这样做更快。这是真的吗?如果是,那么所有的现代编译器都知道这个技巧吗?
发布于 2011-04-04 09:30:32
“概念上合适”和“更快”是两件不同的事情。前者是语义,而后者通常涉及破坏语义。
至于标题中的问题,速度上的差异很小(如果有的话)。在实际发生这种情况的情况下,CPU的编译器通常会对其进行优化--如果它不会导致不同的结果,那么它很有可能而且通常也会这样做。
正确编写你的代码--如果你想要OR,那么就是OR。如果add-vs-OR最终更快,要么你的编译器会帮你做,要么你可以在你决定了每次迭代潜在的额外半纳秒是否值得付出可读性成本和这样的改变可能导致的bug之后再改变它。
发布于 2011-04-04 09:27:59
加法和逻辑或都可能在CPU的ALU的类似部分中执行。不太可能有任何可测量的性能差异,但这将在您的情况下进行测量以确定。
编译器不需要为此费心,因为通常只有在操作数是常量的情况下,编译器才能知道加法和ORing会给出相同的结果,在这种情况下,编译器可以在编译时简单地进行算术运算,甚至不需要为它生成代码。
发布于 2011-04-04 09:28:03
事实上,编译器通常足够聪明,能够以某种方式进行适当的替换。这种优化的术语是强度降低,这是书中最古老的技巧。
https://stackoverflow.com/questions/5533724
复制相似问题