从头学C(38)寄存器变量

0

register 声明用于告诉编译器:它所声明的变量在程序中使用频率较高,希望将该变量放在机器的寄存器中,这样可以使程序更小、执行速度更快。

然后,编译器早已看穿这一切,它可以忽略此选项……

第四章 函数与程序结构 >> 4.7 寄存器变量

register 的声明只适用于两种情况:

一种是局部变量,形式如下。

register int x;
register char c;

另一种是函数的形式参数,形式如下。

func(register unsigned n, register long n)
{
        register int i;
        ... ...
}

实际使用中,底层硬件环境的实际情况对寄存器变量的使用会有一些限制(不同的机器对寄存器的数量和类型的具体限制很有可能是不同的)。

虽然每个函数中只有很少量、而且只允许某些类型的变量可以保存在寄存器中。然而,大量的寄存器声明其实并没有什么害处,因为编译器可以自动忽略过量或不支持的寄存器变量声明。

最后要提到的一点是:无论寄存器变量实际上是否存放在寄存器中,用 register 声明的变量的地址都是不可访问的。这一点会在下一章指针和数组的学习中认识的。

Leave A Reply