C语言中的register是如何储存的

#include<stdio.h>
void main ()
{
long fac(long);
long i,n;
scanf("%ld",&n);
for(i=1;i<=n;i++)
printf("%ld!=%ld\n",i,fac(i));
}

long fac(long n)
{
register long i,f=a;
for(i=1;i<=n;i++)
f=f*i;
return(f);
}

就是l
ong fac(long n)
{
register long i,f=a;
for(i=1;i<=n;i++)
f=f*i;
return(f);
}
这里我不打懂,书上说 i 和f 都是寄存器变量,那么我第一次i=1,走过了for()
f就等于1,第二次 n=2,那么还需不需要再走一次for(i=1,;i<=n;i++)?
第三次是n=3,接下来就怎么走?是直接跳过i=1,从寄存器里取出上次 i 的值
2吗??然后直接f=f*i ???

register 只是寄存器变量,表示这个数据要保存在寄存器中,和任何运算都没有关系,比如你的变量是保存在内存还是缓存中都不重要,和程序没有多大联系,你把register去掉,程序该怎么样就怎么样,用寄存器变量是为了提高程序运行速度,因为寄存器是取值和修改最快的,所以把那些需要多次使用的变量保存在寄存器中是一种提高效率的做法,和算法没关
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-30
C语言中,register表示请求编译器把这个数据存储在寄存器中。
寄存器是CPU里面的一块能够快速访问的地方,比内存还快。通过register,编译器能知道这个变量需要很快的速度,并对它进行优化。不过,register只是“请求”编译器把数据存储到寄存器中,并不能保证这个数据一定在寄存器中,由于某些原因(比如寄存器不够用或编译器认为没必要)可能不会被存储到寄存器中。
另外,寄存器没有地址,所以对register变量取地址是不会编译通过的,即使编译器没有把它存到寄存器中。本回答被网友采纳
第2个回答  2015-05-16
register 只是寄存器变量,表示这个数据要保存在寄存器中,和任何运算都没有关系,比如你的变量是保存在内存还是缓存中都不重要,和程序没有多大联系,你把register去掉,程序该怎么样就怎么样,用寄存器变量是为了提高程序运行速度,因为寄存器是取值和修改最快的,所以把那些需要多次使用的变量保存在寄存器中是一种提高效率的做法,和算法没关
相似回答