为什么前缀增量(++ x)比C中的后缀增量(x ++)更快?

时间:2012-08-30 05:52:42

标签: c gcc clang

  

可能重复:
  Is there a performance difference between i++ and ++i in C?

我听说它说前缀增量比C中的后缀增量要快。这是真的吗?为什么?

++ x vs x ++

2 个答案:

答案 0 :(得分:3)

这是一个荒谬的神话,一遍又一遍地重复着。这两个运算符有语义差异;一个结果是旧值,另一个结果是新值。如果使用此结果,则代码将具有不同的行为,具体取决于您使用的运算符,如果一种行为可以比另一种更有效地实现,则可能包括性能差异。但是,如果您不使用结果,则x=x+1x+=1x++++x相同

答案 1 :(得分:1)

简短的回答没有。原因是它是相同的操作,只是改变了语句的评估顺序。

示例:

int a = x++;
int b = ++x;

伪装配:

mov a, x
inc x
inc x
mov b, x

这是一个简单的例子,但即使在较大的例子中,可能发生的最坏情况是内存屏障强制操作,它不允许将后增量值推送或拉过它,这只会增加额外的{{1由于依赖或强制屏障而导致的操作。大多数编译器在标准情况下使用指令重新排序来优化这个额外的mov