9

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

4

4 回答 4

5

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

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

于 2011-04-04T01:27:58.713 回答
3

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

至于标题中的问题,速度上几乎没有(如果有的话)差异。实际发生这种情况的 CPU 的编译器通常会优化它——如果它不会导致不同的结果,它可以而且通常会

正确编写代码——如果你的意思是 OR,那么 OR。如果 add-vs-OR 最终变得更快,那么您的编译器会为您执行此操作,或者您可以在确定每次迭代潜在的额外半纳秒是否值得以可读性和错误为代价之后更改它一个变化可能会导致。

于 2011-04-04T01:30:31.660 回答
2

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

于 2011-04-04T01:28:02.953 回答
0

它通常不会更快,而且主要是错误的,除非您知道您正在“添加” 1 到偶数地址或值。

于 2011-04-04T01:27:58.070 回答