6. register 关键字

register 关键字是声明一个局部变量或一个形式参数变量为寄存器变量,这个变量在编译时可能会独占一个 CPU 的通用寄存器,以提高计算机的运行速读。

语法:

register 数据类型 变量名1, 变量名2, ...;

说明:

  1. 只有局部变量和形式参数变量可以声明为寄存器变量,全局变量和和静态局部变量不能声明为寄存器变量。
  2. 由于 CPU 内的通用寄存器数量有限,因此在函数内不能声明超过 CPU 通用寄存器的个数的寄存器变量。
  3. 声明过多的寄存器变量,可能会因为可用的通用寄存器过少致使程序运行缓慢。
  4. 只有使用频率特别高的变量才有必要声明为寄存器变量。

示例:

// filename: register.c
#include <stdio.h>

// 求 n 的阶乘 n!
int factorial(register int n) {
    register int result = 1;
    if (n < 1)
        return 0;
    while(n > 1) {
        result *= n;
        n--;
    }
    return result;
}

int main(int argc, char * argv[]) {
    printf("3!: %d\n", factorial(3));
    printf("5!: %d\n", factorial(5));

    return 0;
}

编译和运行结果如下:

weimingze@mzstudio:~$ gcc -o register register.c
weimingze@mzstudio:~$ ./register
3!: 6
5!: 120

实验

尝试使用你的编译器运行上述示例程序。