C语言乱七八糟的思考03

C语言乱七八糟的思考03 为什么自增 i 比 i 更耗性能不就是先后顺序吗为什么底层执行不一样用最通俗的比喻为什么自增 i 比 i 更耗性能不就是先后顺序吗i 比 i 性能差不是因为语法顺序而是底层「必须复制一份旧值」的机制i 不用复制直接改原值。① 前置自增 i : 先自增, 再做其他运算.i i 1; return i;直接修改自己, 返回新值, 没有任何多余操作。② 后置自增 i : 先做其他运算, 再自增.temp i; // 必须复制一份旧值 i i 1; return temp;必须先复制→再自增→ 返回旧副本多了一步复制拷贝这就是性能差的根源。为什么底层执行不一样对基本类型int、float 等i直接寄存器 11 条指令i要存旧值 → 1 → 返回旧值多 1~2 条指令现代编译器会自动优化两者速度几乎一样。但逻辑底层i 依然多一步复制。对对象 / 迭代器C、Java、Go 都一样这才是真正差距大的地方i直接修改自身O (1)i必须创建一个临时对象副本保存旧状态a. 调用构造b. 拷贝内存c. 最后销毁临时对象这是真正的性能损耗所以在 C、STL、Java 迭代器里永远推荐写 i不写 i。用最通俗的比喻i 直接把自己变成新的然后用新的i 先拍一张旧照片复制→ 再把自己变成新的 → 把旧照片给别人拍照 存照片 消耗时间 / 空间结论简单 int 类型现代编译器优化后速度几乎一样但底层逻辑 i 还是多一步复制。对象 / 迭代器i 明显更慢必须创建临时副本有构造 拷贝 销毁开销。最佳实践能写 i 绝不写 i无任何副作用性能永远最优代码更专业。总结i 耗性能 必须复制旧值i 高性能 直接修改自身不复制表面是顺序底层是是否产生临时副本!!