寄存器变量就是用register关键字声明的关键字。根据是否使用优化器,C编译器对寄存器变量采用不同的处理方式。
当使用优化器进行编译时,编译器忽略任何寄存器声明,通过一种能够最有效地使用寄存器的代价算法,把寄存器分配给变量和临时量。
当不使用优化器进行编译时,编译器将使用register关键字的变量分配到寄存器中。
编译器会尽量分配好所声明的寄存器变量。如果编译器运行超出了合适的寄存器,它将通过移动寄存器内容到存储器来释放寄存器。如果定义了太多的寄存器变量,则会限制编译器用来存放临时表达式结果的寄存器数目。这个限制会引起过量的从寄存器到存储器的移动动作。
整型、浮点型和指针类型对象都可以声明为寄存器变量。而其它类型对象不行。
寄存器存储类对参数和局部变量很有用。一般来说,在一个函数中,某些参数会被复制到堆栈的某个地址,在函数体中被引用。一个寄存器参数会被复制到一个寄存器,而不是堆栈。这种做法加速了函数内参数的寻址速度。 |