register可以用于变量的声明,提示他们应该存储于机器的硬件寄存器而不是内存中,这类变量称为
寄存器变量。通常,寄存器变量比存储于内存的变量访问起来效率更高。但是,编译器并不一定要理睬
register关键字,如果有太多的变量被声明为register,它只选取前几个实际存储于寄存器中,其余的
就按普通变量处理。如果一个编译器自己具有一套寄存器优化方法,它也可能忽略register关键字,其
依据是由编译器决定哪些变量存储于寄存器中比人脑的决定更为合理一些。
在典型情况下,你希望把使用频率更高的那些变量声明为寄存器变量。在有些计算机中,如果把指针
变量声明为寄存器变量,程序的效率将能得到提高,尤其是那些频繁执行间接访问操作的指针。你可以
把函数的形式参数声明为寄存器变量,编译器会在函数的起始位置生成指令,把这些值从堆栈复制到
寄存器中。但是,完成有可能,这个优化措施所节省的时间和控件的开销还抵不上复制这几个值所用的开销。
寄存器变量的创建和销毁时间和自动变量相同,但它需要一些额外的工作。在一个使用寄存器变量的函数
返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量未被破坏。许多机器使用运行时堆栈来
完成这个任务。当函数开始执行时,它把需要使用的所有寄存器的内容都保存到堆栈中,当函数返回时,这些值再
复制回寄存器中。
在许多机器的硬件实现中,并不为寄存器制定地址。同样,由于寄存器值照的保存和恢复,某个特定的寄存器在
不同的时刻所保存的值不一定相同。基于这些理由,机器并不向你提供寄存器变量的地址。
寄存器变量。通常,寄存器变量比存储于内存的变量访问起来效率更高。但是,编译器并不一定要理睬
register关键字,如果有太多的变量被声明为register,它只选取前几个实际存储于寄存器中,其余的
就按普通变量处理。如果一个编译器自己具有一套寄存器优化方法,它也可能忽略register关键字,其
依据是由编译器决定哪些变量存储于寄存器中比人脑的决定更为合理一些。
在典型情况下,你希望把使用频率更高的那些变量声明为寄存器变量。在有些计算机中,如果把指针
变量声明为寄存器变量,程序的效率将能得到提高,尤其是那些频繁执行间接访问操作的指针。你可以
把函数的形式参数声明为寄存器变量,编译器会在函数的起始位置生成指令,把这些值从堆栈复制到
寄存器中。但是,完成有可能,这个优化措施所节省的时间和控件的开销还抵不上复制这几个值所用的开销。
寄存器变量的创建和销毁时间和自动变量相同,但它需要一些额外的工作。在一个使用寄存器变量的函数
返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量未被破坏。许多机器使用运行时堆栈来
完成这个任务。当函数开始执行时,它把需要使用的所有寄存器的内容都保存到堆栈中,当函数返回时,这些值再
复制回寄存器中。
在许多机器的硬件实现中,并不为寄存器制定地址。同样,由于寄存器值照的保存和恢复,某个特定的寄存器在
不同的时刻所保存的值不一定相同。基于这些理由,机器并不向你提供寄存器变量的地址。