性能提高(2) 优化循环的要注意的4个细节
来源:互联网 发布:四川长虹和人工智能 编辑:程序博客网 时间:2024/06/06 01:02
适合初中级朋友
(1) 注意CPU的0寄存器
CPU里有个用于存放0的寄存器
在做比较时if,和0比较的话,在汇编上会比0以外的值少一条汇编指令
在循环里用到就能提高效率
int end = max -1;
for(i = 0; i < end; i++) {
}
优化为:
int end = max -1;
for(i = end; i > 0; i--) {
}
同理while(i<end)也能类似方法优化
(2) for循环判断条件里别用赋值语句
for(i = 0; i < (max – 1); i++) {
}
优化为:
int end = max -1;
for(i = 0; i < end; i++) {
}
(3) 能在循环外作的尽量在循环外做
看下面例子:
for() {
a += (b + (c/2));
}
可以把赋值放在循环体外,优化为:
tmp = c/2;
for() {
a += (b + tmp);
}
(4) 对递归或知道指定结果的,可直接指定常数返回
这个不好理解点,先看个例子:
int recursive (int n) {
if (!n) {
/* if n==0 return 1 directly */
return 1;
}
/*递归*/
unsigned long tmp = 1;
for (unsigned long i = 1; i <= n; tmp *= i++)
;
return tmp;
}
比如,我实际调用recursive (int n)时,用调试工具跟踪得知,
调用递归(int n)时,输入参数n值很大几率(80%)为0,1,2,3这几个值,
这样的情况,就可以做如下优化:
int recursive(int n) {
unsigned long tmp = 1;
switch(n) {
case 0:
case 1:
break;
case 2:
tmp = 2;
break;
case 3:
tmp = 6;
break;
default :
{
/*递归*/
for (unsigned long i = 1; i <= n; tmp *= i++)
;
return tmp;
}
}
return tmp;
}
后记:
最近一直做性能优化的工作,想把学到一些东西拿出来和大家分享下,
免得大家走了弯路,以后发现新的优化方法,我会陆续补充,
文中有错误疏漏望不吝指教,呵呵
- 性能提高(2) 优化循环的要注意的4个细节
- 提高java性能的26个细节
- 关于循环注意的细节
- 前端性能优化,前端开发注意的小细节
- java性能优化注意的几个细节规则
- java性能优化注意的几个细节规则
- java性能优化注意的几个细节规则
- java性能优化注意的几个细节规则
- Java性能优化注意的几个细节规则
- CSS优化需要注意的15个细节
- JAVA性能优化需要注意的26个地方
- JAVA性能优化需要注意的26个地方
- JAVA性能优化需要注意的26个地方
- JAVA性能优化需要注意的26个地方--雷锋
- 性能提高的几个细节(转)
- Java代码优化必须注意的细节
- MySql数据库优化注意的四个细节
- php提高10个注意细节
- 80前的前辈,你们都做了些什么?!(二)
- joom!fish使用中文时“LAST_UPDATED2”问题
- ASP.NET 在操作完成之前超时时间已过或服务器未响应
- HIbernate-config.xml
- WebBrowser页面与WinForm交互技巧
- 性能提高(2) 优化循环的要注意的4个细节
- solaris网络~最近接触的一点点
- 开始→运行→输入的命令集锦
- eset nod32 最新升级ID(2009年2月3日更新)
- weblogic相关实用知识
- 傻瓜书,VMware里的Ubuntu
- 有关iframe的文章
- 德州仪器带来永续供电的无线传感器网络
- ASP.Net Web Page深入探讨