注册与自动存储 class?
Register vs Auto Storage class?
我现在正在学习存储 classes here。他似乎对自动存储 class 和寄存器存储 class 解释了同样的事情。他在两者之间唯一不同的是寄存器存储 class 存储在 CPU 寄存器中。这些存储 class 之间有什么区别吗?寄存器存储的任何用途class? Register 关键字是否在某些 C 编译器上默认使用?
register int x = 5;
auto int y = 3;
register
存储 class 并不意味着对象将存储在寄存器中。标准说:
A declaration of an identifier for an object with storage-class
specifier register
suggests that access to the object be as fast
as possible. The extent to which such suggestions are effective is
implementation-defined.
(引用自 ISO C 标准的 N1570 草案,第 6.7.1 节第 6 段。)
将对象存储在 CPU 寄存器中而不是内存中是实现该目的的一种方法,但不是唯一的方法。
现代编译器(至少根据常识)可能比您更擅长决定将哪些变量存储在寄存器中以提高速度,因此使用 register
关键字可能不会做任何其他事情而不是干扰编译器的优化。
register
也使得获取对象的地址是非法的(即使它存储在内存中)。
它基本上是早期编译器(1970 年代)的遗留物,它们没有执行现代编译器所做的复杂优化。对于这样的编译器 register
可以显着提高性能。
(我相信,现代编译器首先假设所有变量都可以在寄存器中分配,并且 "spill" 只有在必要时才将它们分配到内存中,或者因为需要变量的地址,或者因为没有足够的寄存器可用。)
我现在正在学习存储 classes here。他似乎对自动存储 class 和寄存器存储 class 解释了同样的事情。他在两者之间唯一不同的是寄存器存储 class 存储在 CPU 寄存器中。这些存储 class 之间有什么区别吗?寄存器存储的任何用途class? Register 关键字是否在某些 C 编译器上默认使用?
register int x = 5;
auto int y = 3;
register
存储 class 并不意味着对象将存储在寄存器中。标准说:
A declaration of an identifier for an object with storage-class specifier
register
suggests that access to the object be as fast as possible. The extent to which such suggestions are effective is implementation-defined.
(引用自 ISO C 标准的 N1570 草案,第 6.7.1 节第 6 段。)
将对象存储在 CPU 寄存器中而不是内存中是实现该目的的一种方法,但不是唯一的方法。
现代编译器(至少根据常识)可能比您更擅长决定将哪些变量存储在寄存器中以提高速度,因此使用 register
关键字可能不会做任何其他事情而不是干扰编译器的优化。
register
也使得获取对象的地址是非法的(即使它存储在内存中)。
它基本上是早期编译器(1970 年代)的遗留物,它们没有执行现代编译器所做的复杂优化。对于这样的编译器 register
可以显着提高性能。
(我相信,现代编译器首先假设所有变量都可以在寄存器中分配,并且 "spill" 只有在必要时才将它们分配到内存中,或者因为需要变量的地址,或者因为没有足够的寄存器可用。)