register关键字

本文详细解析了C++与C语言中的register关键字的使用与限制,包括其作用于局部变量、存储于寄存器的请求、对现代编译器优化的影响以及与地址获取的关系。

1 register关键字

对于register关键字:

  • register关键字只能作用于局部变量,不能作用于全局变量。
  • register关键字指明将局部变量存储于寄存器中。
  • register只是请求寄存器变量,但不一定请求成功。
  • register变量的必须是CPU寄存器可以接受的值。
  • 不能用&运算符获取register变量的地址。

在这里插入图片描述


2 C++中的register关键字

register关键字请求编译器将局部变量存储于寄存器中,在C++中依然支持register关键字(存在的目的就是为了兼容C语言)。

C++编译器有自己的优化方式:

  • C语言中无法获取register变量的地址。
  • C++中可以取得register变量的地址。

C++中的register关键字:

  • C++编译器发现程序中需要register变量的地址时,register对变量的声明变得无效(早期的做法,register对于现在的编译器来说形同虚设)。
  • 早期的C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。

注意:在任何情况下,都不可能取得一个寄存器的地址,因为地址都是针对内存来说的,不是针对寄存器来说的。


参考资料:

  1. C语言进阶剖析教程
  2. C++深度解析教程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值