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) 待续

  • 相关阅读:
    Unity3d与Android交互
    A star 寻路
    网络协议
    数据驱动
    有限状态机(FSM)
    自己封装一个Log模块
    Unity5.x版本AssetBundle加载研究
    Unity5.x版本AssetBundle打包研究
    alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
    使用代码生成器“代码工厂”快速生成B/S程序代码
  • 原文地址:https://www.cnblogs.com/sier/p/5676476.html
Copyright © 2011-2022 走看看