返回

提高代码的运行效率(1)

发布时间:2023-09-23 03:01:04 316

 

    在下面的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)?

 

 

5:        int m = 0;
00401038 mov dword ptr [ebp-4],0
6:
7: while(1)
0040103F mov eax,1
00401044 test eax,eax
00401046 je test+32h (00401052)
8: {
9: if( m == 0)
00401048 cmp dword ptr [ebp-4],0
0040104C jne test+30h (00401050)
10: break;
0040104E jmp test+32h (00401052)
11: }
00401050 jmp test+1Fh (0040103f)
12:
13: for(;;)
14: {
15: if( m == 0)
00401052 cmp dword ptr [ebp-4],0
00401056 jne test+3Ah (0040105a)
16: break;
00401058 jmp test+3Ch (0040105c)
17: }
0040105A jmp test+32h (00401052)

 

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

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

 

(2) 待续

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
代码测试之内存越界 2023-09-23 00:14:20