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