纠结了好久的问题,变量的多少会影响运行效率吗???
一个函数中,如果有较复杂的运算式,这时,是增加一个中间变量好还是直接用一个变量达成目标好呢??还有,函数返回时,是将该返回数用一个变量存储好,还是直接将该值用已经有的变量直接用表达式返回好呢??
我个人的想法是,在能够减少变量的情况下尽量用较少的变量。这样减少了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 编辑 ]









