我们的问题 是 i++
和 ++i
在 C 中 是否存在性能差异?
C++ 的答案是什么?
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们的问题 是 i++
和 ++i
在 C 中 是否存在性能差异?
C++ 的答案是什么?
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于使用 ILP(指令级并行)的 x86 架构,i++ 在某些情况下可能优于 ++i。
为什么?因为数据依赖。现代 CPU 并行化了很多东西。如果接下来的几个 CPU 周期对 i 的 递增 值没有任何直接依赖关系,则 CPU 可能会省略微码来延迟 i 的递增并将其推入“空闲槽”。这意味着您基本上获得了“免费”增量。
我不知道在这种情况下 ILE 会走多远,但我想如果迭代器变得太复杂并且指针取消引用这可能不起作用。
这是 Andrei Alexandrescu 的演讲,解释了这个概念: https ://www.youtube.com/watch?v=vrfYLlR8X8k&list=WL&index=5
原文由 glades 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
[执行摘要:使用
++i
如果您没有特定理由使用i++
。]对于 C++,答案有点复杂。
如果
i
是简单类型(不是 C++ 类的实例), 那么 C 给出的答案(“不,没有性能差异”) 成立,因为编译器正在生成代码。However, if
i
is an instance of a C++ class, theni++
and++i
are making calls to one of theoperator++
functions.这是这些功能的标准对:由于编译器不生成代码,而只是调用
operator++
函数,因此无法优化tmp
变量及其关联的复制构造函数。如果复制构造函数很昂贵,那么这可能会对性能产生重大影响。