注册与自动存储类?

ama*_*el2 0 c storage-class-specifier

现在我在这里学习存储类。他似乎对自动存储类和寄存器存储类解释了同样的事情。他两者之间唯一的区别是寄存器存储类存储在CPU寄存器中。这些存储类之间有什么区别吗?寄存器存储类有什么用途吗?在某些 C 编译器上,Register 关键字是默认的吗?

register int x = 5;
auto int y = 3;
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 5

存储register类别并不意味着对象将存储在寄存器中。标准说:

带有存储类说明符的对象的标识符声明register表明对该对象的访问应尽可能快。这些建议的有效程度取决于实施情况。

(引用自ISO C 标准N1570草案,第 6.7.1 节第 6 段。)

将对象存储在 CPU 寄存器中而不是内存中是实现此目的的一种方法,但不是唯一的方法。

现代编译器(至少根据常识)可能比您更好地决定哪些变量应该存储在寄存器中以提高速度,因此使用关键字除了register干扰编译器的优化之外可能不会做任何事情。

register也使得获取对象的地址变得非法(即使它存储在内存中)。

它基本上是早期编译器(1970 年代)的遗留物,它们没有执行现代编译器所做的复杂优化。对于这样的编译器register可以显着提高性能。

(我相信,现代编译器首先假设所有变量都可以在寄存器中分配,并且仅在必要时才将它们“溢出”到内存中,要么是因为需要变量的地址,要么是因为没有足够的可用寄存器。)