• 用异或来交换两个变量能提快速度是错误的


    在进行两个变量的时候,常常会看到有些书误人子弟的推荐使用异或的方式:
    方式一
    {
      x = x ^ y;
      y = x ^ y;
      x = x ^ y;
    }
    而不是採用暂时变量实现交换:
    方式二
    {
      int temp;
      temp = a;     
      a = b;
      b = temp;
    }
    美其名曰:节省内存,提高执行速度。

    暂时变量交换的方式:

    可是,真的节省了内存吗?
    使用这样的方式大部分时候,没有节省内存。由于。普通情况下编译器会将方式二中的暂时变量优化到寄存器中,不使用堆栈。

    真的提高了执行速度吗?
    下边的博客给出了非常具体的解答。

    因为方式一,每一次运行都会多进行三次异或运算。

    又因为方式一的代码,在编译器理解起来。可能比較困难所以编译器翻译出来的代码,运行效率更低。


    关于优化:
    http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2012/1224/11834.html
    “过早的优化是万恶之源”,当我们没有确定程序影响性能最重要的20%代码时,最好不要进行优化。同一时候。在优化时,不要过于相信经验。由于CPU技术,编译技术。操作系统等等。都会让看似可行的技术,失效。

    在优化前,通过实际的执行确定影响性能的代码,然后进行优化。

    最后。从软件project的角度看,代码是写给人看的。最easy理解的代码,被维护的代价也最小。方式二的代码更easy阅读。

    结语:
    编译器非常强大,CPU技术进步非常快,我们的经验积累反而是最慢的。

    多反思,多总结。


    附注:
    假设要作为面试题。交换一个32位无符号整形数的方案,倒是更能够考虑一下採用位运算的方式解决。
  • 相关阅读:
    JavaScript 垃圾回收
    JavaScript 跳坑指南
    javaScript AJAX
    高效 JavaScript
    Java使用 Thumbnails 压缩图片
    Vue前端压缩图片
    JS input输入框字数超出长度显示省略号.....
    Vue图片浏览组件vviewer使用
    浏览器获取京东cookie
    图片在容器内水平垂直居中显示
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6899923.html
Copyright © 2020-2023  润新知