在C++中,关键字register在其最新标准ISO/IEC 14882:2017 (C++17)中被删除。
但在C中,我也看到了很多,越来越多的编码器倾向于不使用或喜欢使用register类限定符来声明对象,因为它的目的优势几乎毫无用处,就像在@user253751´s answer中那样:
register不会导致编译器将值存储在寄存器中。register绝对什么都不做。只有非常老的编译器才使用register来知道要在寄存器中存储哪些变量。新编译器自动完成此操作。即使是20岁的编译器也会自动这么做。
register类变量,而在使用关键字register时,我在现代程序中使用了register类变量?或者这种行为是多余的和不推荐的?发布于 2020-01-07 18:30:34
使用register没有好处。现代编译器基本上忽略了它--它们可以比您更好地处理寄存器分配。它唯一阻止的是获取变量的地址,这不是一个显著的好处。
我自己的代码都不再使用register了。当我处理一个文件时,我处理的代码会丢失register --但是要通过17,000+文件需要时间(而且我只在有外部原因更改它时才更改它--但它可能是一个脆弱的原因)。
发布于 2020-01-07 18:50:03
正如@JonathanLeffler所说,它在大多数情况下都被忽略了。
如果希望将变量保存在特定的寄存器中,某些编译器具有特殊的扩展语法。
gcc全局变量或局部变量可以放在特定的寄存器中。此选项并不适用于所有平台。我知道AVR和ARM端口实现了它。
示例:
register int x asm ("10");
int foo(int y)
{
x = bar(x);
x = bar1(x);
return x*x;
}但老实说,我从来没有在编程生活中使用过它(30y+)
发布于 2020-01-07 19:32:25
它实际上是不受欢迎的,也没有真正的好处。
C是20世纪70年代早期的产物,register关键字向编译器提供了一个提示:( a)这个特定的对象将被大量使用,所以b)您可能希望将它存储在主存以外的其他地方- IOW、寄存器或其他“快速”内存。
这可能在当时起到了很大的作用--现在,它几乎被忽视了。唯一可测量的效果是,它阻止您获取该对象的地址。
https://stackoverflow.com/questions/59634042
复制相似问题