| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 866 人关注过本帖
标题:纠结了好久的问题,变量的多少会影响运行效率吗???
只看楼主 加入收藏
shansongh
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2011-4-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
纠结了好久的问题,变量的多少会影响运行效率吗???
一个函数中,如果有较复杂的运算式,这时,是增加一个中间变量好还是直接用一个变量达成目标好呢??
还有,函数返回时,是将该返回数用一个变量存储好,还是直接将该值用已经有的变量直接用表达式返回好呢??

我个人的想法是,在能够减少变量的情况下尽量用较少的变量。这样减少了cpu和内存之间的交流所产生的延迟,但是cpu的空间毕竟是有限的,
如果是大量的使用这种构成,会不会反而加大了cpu的负担,从而让cpu的运行效率降低呢??

希望大家能够解我心头之惑,拜谢之。。。。。。

现特发两段代码,以作演示

程序代码:
#include <stdio.h>
#include <stdlib.h>


int main()
{
    int sum(int x,int y);
    int mon,day,total;   //定义变量月·日·及总天数
    scanf("%d/%d",&day,&mon);  //2013年的某一天,按日/月格式输入
    total=sum(day,mon)+2;    //由于2013.1.1是星期二,所以加2
    total%=7;
    return 0;
}

int sum(int x,int y)
{
    while(--y)
    {
        if (y==2)  //2月加28天,大月加31天,常月加30天。
        {
            x+=28;
        }
        else if (y==1 || y==3 || 5==y || 7==y || 8==y || 10==y || 12==y)
        {
            x+=31;       //理论上是不需要考虑十二月的,但是为了逻辑的严密性还是加上了。
        }
        else
        {
            x+=30;
        }
    }
    return x;
}

/*另一种写法是:*/

int main()
{
    int sum(int x,int y);
    int mon,day,total,week;   //定义变量月·日·及总天数
    scanf("%d/%d",&day,&mon);  //2013年的某一天,按日/月格式输入
    total=sum(day,mon);    //由于2013.1.1是星期二,所以加2
    total+=2;
    week=total%7;
    printf("%d",week);
    return 0;
}

int sum(int x,int y)
{
    int i,days;
    i=y-1;
    days=x;
    while(i--)
    {
        if (i==2)  //2月加28天,大月加31天,常月加30天。
        {
            days+=28;
        }
        else if (i==1 || i==3 || 5==i || 7==i || 8==i || 10==i || 12==i)
        {
            days+=31;       //理论上是不需要考虑十二月的,但是为了逻辑的严密性还是加上了。
        }
        else
        {
            days+=30;
        }
    }
    return days;
}

这是一个计算2013年某月某日的星期数的小程序,希望各位能不吝赐教,。。
只是想了解一下到底我的意见是否正确。。。。

补充一下,就如TonyDeng所理解的一样,
申请变量是申请内存中的地址,而内存毕竟是cpu外部的设备,读写是要有延迟的。
cpu在计算的时候也是先将数据读入寄存器,在对寄存器里的数据进行运算。那么,如果cpu对数据的运算式需要中间的存储单元存储时,它应该是优先在缓存里申请内存单元吧,而缓存里的读写肯定是内存里读写的至少几十倍吧。。。。


[ 本帖最后由 shansongh 于 2013-4-25 13:08 编辑 ]
搜索更多相关主题的帖子: 表达式 影响 
2013-04-25 02:26
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:3 
实践来检验:
1.使用time函数来检测程序运行时间,太细小的差异看不出的话,你同样的事情循环10000遍,看看
2.看编译后的汇编代码,差异就有了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-04-25 06:13
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:3 
没看懂什么意思...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-25 10:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
衡量程序好坏的标准偏了呗。

授人以渔,不授人以鱼。
2013-04-25 10:19
shansongh
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2011-4-2
收藏
得分:0 
回复 4楼 TonyDeng
能说的详细点吗。
2013-04-25 10:59
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:3 
不要纠结于这点点,除非两个程序效率相差很多,否则程序的可读性和可维护性比效率要重要
2013-04-25 11:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
首先,C毕竟不是汇编那样的低级语言,你写的C代码最终如何使用CPU寄存器和内存,取决于编译器编译出来的机器码,那不是你可以完全控制的,很多表面上你自以为没有使用变量的地方,其实用了,所以不必要在这样的细节上纠缠,那对效率的提升没有多大的帮助。

其次,程序的质量标准有很多方面的指标,而这些指标之间有些是有互斥性的,好的程序是综合衡量,不是片面的某些指标超常发挥。对时间或空间的片面追求是最常见的编程误区。

授人以渔,不授人以鱼。
2013-04-25 11:07
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用TonyDeng在2013-4-25 11:07:36的发言:

首先,C毕竟不是汇编那样的低级语言,你写的C代码最终如何使用CPU寄存器和内存,取决于编译器编译出来的机器码,那不是你可以完全控制的,很多表面上你自以为没有使用变量的地方,其实用了,所以不必要在这样的细节上纠缠,那对效率的提升没有多大的帮助。

其次,程序的质量标准有很多方面的指标,而这些指标之间有些是有互斥性的,好的程序是综合衡量,不是片面的某些指标超常发挥。对时间或空间的片面追求是最常见的编程误区。

楼主的问题,我没看懂
从标题上来看
就是使用算法时,是尽可能反复使用已有变量还是申请新的???

如果是这种问题,我想起一起学java的时候,同学们膜拜的一句优化原则:"小循环写在大循环外面"

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-25 11:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
他是觉得使用变量会占用内存,令CPU反复存取耗费时间。

授人以渔,不授人以鱼。
2013-04-25 11:25
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:3 
程序效率 首先考虑的是算法层面的 其次才是语句层次的优化
语句的执行效率往往不是占主导地位的 当然我说的是代码写的不是很过分的情况下

人生是一场错过 愿你别蹉跎
2013-04-25 12:25
快速回复:纠结了好久的问题,变量的多少会影响运行效率吗???
数据加载中...
 
   



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

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