假设,如果CPU中没有可用的寄存器,则register
变量将被视为auto
变量。那么我们可以将&
运算符应用于它吗?
另外,有没有办法检查具有register
存储类的变量是否存储在CPU中?
答案 0 :(得分:3)
没有。你不能。标准非常清楚,无论是否使用实际的寄存器,都允许在register
存储分类变量上应用运算符:
C11,6.7.1存储类说明符,p6
具有存储类的对象的标识符声明 说明符寄存器表明对对象的访问速度最快 可能。这些建议有效的程度如下 实现定义。 121
121)实施可以简单地将任何注册申报视为 汽车申报。但是,是否可寻址存储 实际使用,声明的对象的任何部分的地址 无法显式地计算存储类说明符寄存器 (通过使用6.5.3.2中讨论的一元&运算符)或隐式 (通过将数组名称转换为指针,如6.3.2.1中所述)。 因此,唯一可以应用于声明的数组的运算符 存储类说明符寄存器是sizeof和_Alignof 。
(强调我的)
答案 1 :(得分:1)
不,您不能将&
应用于具有register
存储说明符的变量,无论它是否存储在寄存器中。
(即使特定编译器无法在特定平台上为其分配寄存器,代码也必须有效。)
第6.5.3.2节[地址和间接运算符]说
一元&的操作数运算符应该是一个函数 指示符,结果 []或一元*运算符,或指定不是位字段的对象的左值 未使用寄存器存储类说明符声明。
检查变量是否实际存储在寄存器中的方法是检查生成的代码。