搜索
查看: 581|回复: 8
打印 上一主题 下一主题

小幅度提升算法速度

[复制链接]
跳转到指定楼层
楼主
发表于 2014-11-17 21:05:02 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
循环是最损耗程序速度的基本块。对循环的一点优化是对速度很大提升。少使用循环。尽量把循环次数多的纺外面少的放里面。
2,恰当使用快速运输符合。掌握位运算*等快速运算符合。比如a=a+1,肯定没a++好。
3,对于频繁调用函数使用宏函数。
4,判断语句尽量把概率大的放前面,尽量使用连续判断语句。&&||。
5,程序编译是从上倒下执行以{}为单位。编译优化要在基本块里优化。
6,if(a==3)没if(3==a)好。
多谢各位互联网前辈的分享。
来自: 微社区
沙发
 楼主| 发表于 2014-11-17 21:06:30 来自手机 | 只看该作者
多思考。帖子内容还是有的。
来自: 微社区
板凳
 楼主| 发表于 2014-11-17 21:15:21 来自手机 | 只看该作者
为什么现在没人回复我帖子了。好坏倒是来个评论啊啊啊。。。
来自: 微社区
地板
发表于 2014-11-18 21:32:14 | 只看该作者
你这转来的都是啥……第一少用循环就注定多用递归,递归效率肯定比循环低;第二任何现代编译器对于a=a+1和a++产生的代码都是一样的,速度不会有不同,而且随便写a++是比较差的习惯;3. 宏不如用内联函数 4. 概率小的放前面 5. 这是编译器实现问题,现代编译器没那么简单 6. 很多人也支持a == 3比较好,理由是既然记得倒着写,为什么记不住用 == 而非 =
5#
 楼主| 发表于 2014-11-19 13:19:43 来自手机 | 只看该作者
rosynirvana 发表于 2014-11-18 21:32
你这转来的都是啥……第一少用循环就注定多用递归,递归效率肯定比循环低;第二任何现代编译器对于a=a 1和a ...

对还有要使用内联函数。
来自: 微社区
6#
发表于 2014-11-22 15:15:55 | 只看该作者
最近看了一点汇编(虽然没看懂多少)
我看了下LOOP、LOOPZ、LOOPE、LOOPNZ、LOOPNE等指令,发现都是对寄存器是否为0进行判断来决定是否结束循环的
照这样看,是否将循环从
[mw_shl_code=c,true]for(int a=0;a<10;++a)[/mw_shl_code]
改为
[mw_shl_code=c,true]for(int a=9;a>=0;--a)[/mw_shl_code]
更有利于编译器进行优化?
7#
发表于 2014-11-22 20:01:24 | 只看该作者
981013 发表于 2014-11-22 15:15
最近看了一点汇编(虽然没看懂多少)
我看了下LOOP、LOOPZ、LOOPE、LOOPNZ、LOOPNE等指令,发现都是对寄存 ...

现代CPU和现代编译器都非常复杂
这个例子里就有branch prediction的影响
建议别去考虑这种事情了
8#
 楼主| 发表于 2014-11-23 15:17:29 | 只看该作者
无语...
         
9#
发表于 2014-12-13 02:15:29 | 只看该作者

怎么了?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表