Register 的一些了解

举报
ReCclay 发表于 2022/02/22 00:29:15 2022/02/22
【摘要】 Register修饰符暗示编译程序相应的变量将将被频繁使用 如果可能的话,应将其保存在CPU的寄存器中,以指加快其存取速度。但是,使用register修饰符有几点限制。 首先,register变量...

Register修饰符暗示编译程序相应的变量将将被频繁使用
如果可能的话,应将其保存在CPU的寄存器中,以指加快其存取速度。但是,使用register修饰符有几点限制。

首先,register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小於或等於整型的长度。但是,有些机器的寄存器也能存放浮点数

其次,因为register变量可能不存放在内存中,所以不能用取址符运算符“ & ”来获取取址符运算符“ &” register变量的地址。如果你试图这样做,编译程序就会报告这是一个错误。

register变量修饰符的用处有多大还受其它一些规则的影响。因为寄存器的数量是有限的,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此,真正能起作用的register修饰符的数目和类型都依赖於运行程序的机器,而任何多余的register修饰符都将被编译程序所忽略。

那麽,甚麽时候使用register变量修饰符呢?

对现有的大多数编译程序来说,永远不要使用register变量修饰符。早期的C编译程序不会把变量保存在寄存器中,除非你命令它这样做,这时register变量修饰符是C语言的一种很有价值的补充。然而,随着编译程序设计技术的进步,在决定哪些变量应该被存到寄存器中时,现在的C编译程序能必程序员作出更好的决定。实际上,许多C编译程序会忽略register修饰符,因为尽管它完全合法,但它仅仅是暗示而不是命令。

省去了内存与CPU的数据交换过程,直接使用CPU的内部寄存器。

说明:
(1)只有局部变量和形参可以作为register变量,全局变量不行。

(2)80 x86系列CPU最多可使用的register变量数目有限。int型可使用8个通用寄存器。

实际上有些系统并不把register变量存放在寄存器中,而优化的编译系统则可以自动识别使用频繁的变量而把他们放在寄存器中,因此用register声明变量实际上是不必要的。我们只需要知道有这么一种变量即可。

(3)静态变量不能定义为register。


参考: http://blog.csdn.net/franz_/article/details/49427933

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/79173140

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。