为什么前缀增量(++ x)比C中的后缀增量(x ++)更快?
可能重复:
C ++中的i ++和++ i之间是否存在性能差异?
我听说它说前缀增量比C中的后缀增量要快。这是真的吗?为什么?
++ x vs x ++
这是一个荒谬的神话,一遍又一遍地重复。 这两个运算符有语义差异; 一个结果是旧值,另一个结果是新值。 如果使用此结果,则代码将具有不同的行为,具体取决于您使用的运算符,如果一种行为可以比另一种更有效地实现,则可能包括性能差异。 但是如果你不使用结果, x=x+1
, x+=1
, x++
和++x
都是相同的 。
简短的回答没有。 原因是它是相同的操作,只是改变了语句的评估顺序。
例:
int a = x++; int b = ++x;
伪assembly:
mov a, x inc x inc x mov b, x
这是一个简单的例子,但即使在更大的例子中,可能发生的最坏情况是内存屏障强制操作,它不允许将后增量值推送或拉过它,这只是因为依赖或强制而增加额外的mov
操作屏障。 大多数编译器无论如何都会使用指令重新排序来优化标准情况下的额外mov
。