寄存器变量

转自:https://blog.csdn.net/hyqsong/article/details/46766565

之前竟然没听过c语言还有寄存器,好可怜,我是小白请见谅,哈哈

简单总结了几条关于register变量应该知道的东西,如下:

1.寄存器变量可以用来优化加速c语言程序

2.声名只需在类型前多加register 即可,eg register int quick; (quick 就是一个整形的寄存器变量)

3.register只是一个建议型关键字,能不能声名成功还取决于编译器(建议型的关键字还有c++中的 inline),若不幸没有请求成功,则变量变成一个普通的自动变量。

4.是无法对一个register变量取地址的(因为寄存器变量多放在寄存器而非内存中,内存有地址,而寄存器是无地址的)

5.即便没有请求成寄存器变量,没有如愿的放入寄存器中,但是,依然不能对他取地址,因为他已经被声明为register了,就是这么任性

什么情况用寄存器变量:

   当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

什么变量可以声明为寄存器变量:

. 只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量。


如:register int res __asm__("ax");
这里ax是变量res希望使用的寄存器。

猜你喜欢

转载自blog.csdn.net/familyshizhouna/article/details/81203289