C语言关键字——register

109 阅读1分钟

register关键字用于修饰变量,被其修饰的变量称为寄存器变量。

register关键字请求编译器尽可能地将变量存储在CPU内部寄存器中,而不是传统的通过内存寻址访问。这样做的好处是可以提高访问效率,访问变量速度更快。

由于CPU的寄存器数量有限,因此register关键字修饰的变量是尽可能存储在寄存器中,并不是一定会存储在寄存器,这取决于编译器的分配。

因为寄存器变量存放在寄存器中,因此有如下特性需要注意:

  • register变量必须是能被CPU所接受的单值类型(整型、指针类型、浮点类型等),并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。

  • 寄存器内没有地址,register变量不能用“&”来获取变量的地址。

  • 只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。

#include <stdio.h>
#include <stdlib.h>

//register int val_1 = 1; // error: register name not specified for 'val_1'

int main()
{
    register int val_2 = 2;
    //int *p_val_1 = &val_2;     //error: address of register variable 'val_2' requested

    register double val_3 = 3.14;   // right

    int val_4 = 4;
    register int *p_val_2 = &val_4; //right

    return 0;
}