zoukankan      html  css  js  c++  java
  • 提高代码的运行效率(1) 四


    【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

        在下面的blog当中,我将会讲解一些提高个人代码效率的一些手段。这些手段都是被实践证明,切实可行的。但是不同的处理器和处理平台上面可能会有所差别,但是本质上是一样的。

    (1) 用for(; ;) 代替while(1)

    (2) 循环的时候首先进行内部数据的循环,然后进行外部数据的循环

    (3) 同一层循环之内,尽量只安排同一数据的相关操作

    (4) 编译的时候头文件不要相互包含,尽量简单

    (5) 尽量不要使用乘除, 多用加减和移位操作

    (6) 部分复制、计算操作可以用SIMD命令代替,比如 SSE命令等等

    (7) 如果是服务器软件或者是游戏客户端软件,请多使用查询,少计算

    (8) if() ...else()的时候,把最长出现的代码放在前面,不经常出现的结果放在后面

    (9) 使用数组的时候,多使用int* p = &value[0]; p ++;迭代的形式, 这样可以减少数据的计算

    (10) 优化算法,发挥当前CPU多核的优势,最大限速地发挥CPU的特性

    说明:

        以下所有代码都是VC6.0完成。 

    详解:

    (1) 为什么需要用for(; ;)代替while(1)?

    ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
    1. 5:        int m = 0;  
    2. 00401038   mov         dword ptr [ebp-4],0  
    3. 6:  
    4. 7:        while(1)  
    5. 0040103F   mov         eax,1  
    6. 00401044   test        eax,eax  
    7. 00401046   je          test+32h (00401052)  
    8. 8:        {  
    9. 9:            if( m == 0)  
    10. 00401048   cmp         dword ptr [ebp-4],0  
    11. 0040104C   jne         test+30h (00401050)  
    12. 10:               break;  
    13. 0040104E   jmp         test+32h (00401052)  
    14. 11:       }  
    15. 00401050   jmp         test+1Fh (0040103f)  
    16. 12:  
    17. 13:       for(;;)  
    18. 14:       {  
    19. 15:           if( m == 0)  
    20. 00401052   cmp         dword ptr [ebp-4],0  
    21. 00401056   jne         test+3Ah (0040105a)  
    22. 16:               break;  
    23. 00401058   jmp         test+3Ch (0040105c)  
    24. 17:       }  
    25. 0040105A   jmp         test+32h (00401052)  
      

        可以很清楚地看出,while(1)被翻译成了三个命令,而for(;;)却没有。很多同学可能认为,这只是三条指令而已,没有什么大惊小怪的,

    但是我们要知道,很多循环都是上百万次的进行的,如果一般的函数都注意这个问题,那么一天节省下来的CPU时间是相当可观的。

    (2) 待续

  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/sier/p/5676476.html
Copyright © 2011-2022 走看看