| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 980 人关注过本帖
标题:新手请教,语句的效率问题!
只看楼主 加入收藏
ssikkiss
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
新手请教,语句的效率问题!
一直想问问,像下面的代码,怎样写更快:

1.在写循环的时候,
a写法:
        for(int i=0;i<text.length();i++){}
b写法:
        int len=text.length();
        for(int i=0;i<len;i++){}
请问a和b谁快?是一样吗?关键有时候text.length()会换成其他函数,比如一个执行的很慢的函数,是否每次比较的时候都会运算一次呢?

2.在写循环的时候,
a写法:
    while(i>0){
        ......
        int k=2;
        ......
    }
b写法:
    int k=2;
    while(i>0){
        ......
        ......
    }
请问a和b谁快?对a,是不是循环体里每次循环,都要创建一个变量k,又删除这个变量,而比较慢?

3。对整数乘2的运算:
a写法:    k<<=1;
b写法:    k+=k;
c写法:    k*=2;
请问a,b,c哪种快?其速度与k的值有没有关系?

4.对相减求模的运算,(模p,p,x,y都是正整数)
a写法:
        x-=y;
        x+=p;
        x%=p;
b写法:
        x-=y;
        if(x<0){
            x+=p;
        }else if(x>0){
            x-=p;
        }
请问a和b谁快?



搜索更多相关主题的帖子: 效率 语句 
2010-06-13 21:06
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
第一题,b的写法比较快。
因为b的写法只调用了一次函数,而a的写法调用了n次,
大家都知道,函数调用时有开销的

南国利剑
2010-06-14 15:06
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
第二题,不是很理解你的意思。

南国利剑
2010-06-14 15:07
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
第三题,我认为a的位运算的方法最快。

南国利剑
2010-06-14 15:09
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
第四题,也没看懂题目的意思。

南国利剑
2010-06-14 15:11
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:15 
问题1: 两种写法效率没有区别,因为编译器处理时也是先算出结果然后保存在寄存器中。选择让代码更易读的写法。
问题2: 编译器优化会把循环中的不变量外提,所以两种写法在优化后是一样的。不过更推荐第二种写法。
问题3: 第一种写法效率较高。实际上,某些编译器会把b,c优化为第一种写法。
问题4: 没看懂

PS:如果你想提高程序效率,应该考虑在算法上的改进,而不是语句。

沉醉东风月下读。柴门闭,莫管客来无。
2010-06-14 16:30
华仔li
Rank: 2
来 自:山东济南
等 级:论坛游民
帖 子:14
专家分:54
注 册:2010-6-9
收藏
得分:0 
第一题肯定是b快啦
2010-06-14 23:21
ssikkiss
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-13
收藏
得分:0 
第4问是这样的:
就是我自定义了一个类型,名叫mod_int,
1:mod_int型的数总是正数
2:mod_int型的数小于一个素数p;
3:mod_int其实就是整数模p构成的有限域;

上面的第4问就是对这中mod_int型的数做减法;
请问应该用哪种方法写?
2010-06-14 23:33
ssikkiss
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-13
收藏
得分:0 
对第1问我还有点疑问:
假设这样:
for(int i=0;i<k;i++){
    k=....
}
或者这样:
int calc(){
    return k+2;
 }
for(int i=0;i<calc();i++){
    k=....
}

如果编译器保存了k的值的话,后面对k的修改就无效了吗?



2010-06-14 23:41
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:0 
回复 9楼 ssikkiss
不是。循环优化是对循环不变量的。如果k是循环变量,它不会被优化。

沉醉东风月下读。柴门闭,莫管客来无。
2010-06-16 17:49
快速回复:新手请教,语句的效率问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016616 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved