gcc忽略注册声明的案例?

gcc忽略注册声明的案例?,c,gcc,compiler-construction,C,Gcc,Compiler Construction,K&R说 编译器可以随意忽略通知(注册声明) 在什么情况下,如果我定义register intx=4,gcc会忽略?这完全取决于实现 通常,您应该信任编译器将变量放入寄存器,而不是自己定义它们 C99 6.7.1存储类说明符 使用存储类说明符register 建议尽可能快地访问对象。这种情况发生的程度 建议是有效的,并定义了实施 另外,C++11已经不赞成使用register关键字作为存储类说明符,也许将来C也会这样做。通过将变量声明为'register',我们只是请求(而不是强制)编译器将变量

K&R说

编译器可以随意忽略通知(注册声明)


在什么情况下,如果我定义
register intx=4,gcc会忽略

这完全取决于实现

通常,您应该信任编译器将变量放入寄存器,而不是自己定义它们

C99 6.7.1存储类说明符 使用存储类说明符
register
建议尽可能快地访问对象。这种情况发生的程度 建议是有效的,并定义了实施


另外,C++11已经不赞成使用
register
关键字作为存储类说明符,也许将来C也会这样做。

通过将变量声明为
'register'
,我们只是请求(而不是强制)编译器将变量a存储在CPU寄存器中。编译器将决定在何处存储变量


如果您已将更多变量声明为
寄存器
,那么由于CPU寄存器受到限制,这些变量中可能很少会进入CPU寄存器。这同样取决于实现。

如果我们参考C99标准草案,我们会发现这是实现定义的,第6.7.1节存储类说明符第4段说:

具有存储类说明符寄存器的对象的标识符声明 建议尽可能快地访问对象。这种情况发生的程度 建议是有效的是否定义了实施

gcc
邮件列表中,似乎可以看出,如果您遵循线程,那么
register
已被忽略一段时间,除非您不使用优化(使用-O0)


请注意,使用
寄存器
确实有另一个影响,因为它阻止使用地址运算符(
&
)。

我希望C委员会不会反对
寄存器
,Jens Gustedt对此有一些很好的建议:C11标准至少在C99标准没有提到的一个地方提到了
寄存器