C语言中的变量可以有自己的属性,在定义变量的时候可以同时加上“属性”关键字,来指明该变量拥有特殊的意义。
C语言中所有局部变量默认属性为aoto,在程序的栈上分配空间。
Register只是向编译器请求寄存器变量,但不一定请求成功;最终以编译器的决定为准。
C语言中所有局部变量默认属性为aoto,在程序的栈上分配空间。
statice属性
Static指明变量的“静态”属性,存储在程序的静态区中;static同时具有“作用域限定符”的意义,修饰全局变量或函数时其作用域只在声明的文件中,来限定全局变量或者函数的作用范围。
Register属性
Register指明将变量存储于寄存器中(一般的变量存储在内存中)。Register只是向编译器请求寄存器变量,但不一定请求成功;最终以编译器的决定为准。
Register变量必须是CPU寄存器可以接受的值(硬件的CPU只能支持4字节的变量,如果申请8字节变量那就不行)。
注意:不能用&运算符获取register变量的地址(register变量根本不在内存中)
实例验证程序:
#include<stdio.h>
aoto int g=0;
register int m=0;
void main()
{
register int n=0;
printf(“%0x\n”,&n);
}
//gcc: error: file-scope declaration of ’g’ specifies ‘aoto’
//gcc: error: register name not specified for ‘m’
//gcc: error:address of register variable ‘j’ requested
小结:
全局变量不能为register,因为如果寄存器全部被占用,CPU将无法工作;
register变量用在性能实时性高的地方,以提高运行效率。