Register 寄存器变量
定义
register声明告诉编译器,它所申明的变量在程序中使用频率较高。其思想是:将register变量到寄存器中,这样可以使程序更小、执行速度更快。但是编译器可以忽略此选项。
用法
register 只适用于自动变量以及函数的参数。
- register申明变量的形式如下:
register int a;
int register b;
这两种形式都是可以的,但第一种会简单明了一些。
- register申明函数参数
int func(register char ch, register long int b)
{
register int a;
}
总结
-
数量有限
实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是过量的寄存器申明并没有什么坏处,这是因为编译器可以忽略过量的或不支持的寄存器变量申明。
-
平台差异
在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。 -
无法访问地址
无论寄存器变量实际上是不是存放在寄存器中,它的地址都不是不能访问的。如果我们访问了寄存器变量的地址,编译的时候是会报错的。
想一下,这是为什么?很简单,因为我们的应用程序是跑在内存中的,内存中经过映射的虚拟地址空间的中低0~3G的地址都是我们可以访问的。但是register 寄存器变量是存放在寄存器中的所以我们是无法访问的,相当于访问了非法的地址,所以编译的时候是会报错的。