📄 codetc11b.dat
字号:
一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的.当程序中用到哪一个变量的值时,由控制 器发出指令将内存中该变量的值送到运算器中.经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放.
如果有一些变量使用频繁(例如在一人函数中执行9999次循环, 每次循环中都要引用某局部变量),则为存取变量的值要 花不少时间.为提高执行效率,C语言允许将局部变量的 值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算 ,不必再到内存中去存取 .由于对寄存器的存取速度远高于对内存的存取速度, 因此这样做可以提高执行效率.这种变 量叫做"寄存器变量",用关键字register作声明.例如:输出1到5的阶乘的值.
int fac(int n)
{
register int i,f=1; /* 定义寄存器变量 */
for(i=1;i<=n;i++)
f=f*i;
}
main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
定义局部变量f和i是寄存器变量,如果n的值大,则能节约许多执行时间.
----
说明: 1. 只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行.在调用一个函数时占用一些寄存 器以存放寄存器变量的值, 函数调用结束释放寄存器.此后,在调用另一个函数时又可以利用它来存放该函数 的寄存器变量.
2. 一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存变量.不同的系统允许使用的寄存器是不同 的, 而且对register变量的处理方法也是不同的, 有的系统对register变量当作自动变理处理,分配内存单 元,并不真正把它们存放在寄存器中,有的系统只允许将 int,char和指针型变量定义为寄存器变量.当今的优 化编译系统能够识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定.因此 在实际上用register声明变量是不必要的.读者对它有一定了解即可.
3. 局部静态变量不能定义为寄存器变量.不能写成 register static inta,b,c;不能把变量a,b,c既放在静态 存储区中,又放在寄存器中, 二者只能居 其一.对一个变量只能声明为一个存储类别.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -