【问题标题】:Why is prefix incrementation (++x) faster than postfix incrementation (x++) in C? [duplicate]为什么在 C 中前缀递增 (++x) 比后缀递增 (x++) 快? [复制]
【发布时间】:2012-08-24 19:29:50
【问题描述】:

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

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

++x 与 x++

【问题讨论】:

  • 不是。应该更改问题的标题以反映这一点...
  • 标题中的“为什么”让我很兴奋,因为我期待基准测试......真是令人失望......
  • 不要相信你所听到的一切。
  • 不仅可能,而且完全重复。
  • 可能想要修改重复项,使其显示前缀和后缀增量以帮助搜索结果。我不会发布这是搜索为我找到的重复项(重复项不明确)

标签: c gcc clang


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

例子:

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

伪汇编:

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

这是一个微不足道的例子,但即使在更大的例子中,最糟糕的可能是内存屏障强制操作,它不允许将后增量值推入或拉过它,这只会增加一个额外的 mov 操作到期依赖或强制障碍。大多数编译器在标准情况下使用指令重新排序优化掉这个额外的mov

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多