譬如表达式 ++i 和 i++ 就分别表示对 i 进行前置自增 和 对 i 进行后置自增,用代码来说明的话, ++i(前置自增) 大概和以下代码等价:
i = i + 1;
return i;
而 i+...(用以保存 i 之前的数值),所以 i++ 比 ++i 要消耗更多的 CPU 资源(因为要使用临时变量),所以自己编码时也慢慢形成了一个习惯: 多用前置自增,少用后置自增....虽然就现在的程序开发来讲,似乎我们已经不必特别关心 前置自增 和 后置自增 的效率差异了,在合适的情况下,编译器对于 前置自增 和 后置自增 也能生成同样高效的汇编代码了,但是自己依然坚持着上面的编码习惯...这里的原因是 前置自增 会比 后置自增 产生更多的 指令流水线停顿(stall),一般情况下,虽然 前置自增 对比 后置自增 会产生更少的指令操作,但是其产生的指令流水线停顿对效率的影响更大,所以我们应该...后面就是简单的测量运行时间了,结果也确实如书中所说:
后置自增 平均要比 前置自增 快 20% 左右 ~
总结
多用后置自增,少用前置自增,虽然 后置自增 会产生更多的指令操作,但是一般情况下对指令流水线的影响更小