现在我正在学习存储类。他似乎对自动存储类和寄存器存储类解释了同样的事情。两者之间唯一的区别是寄存器存储类存储在CPU寄存器中。这些存储类之间有什么区别吗?寄存器存储类的任何用途?是注册关键字他们的默认对一些C编译器?
register int x = 5;
auto int y = 3;
register
存储类并不意味着该对象将被存储在寄存器中。标准是:
具有存储类的对象的标识符声明说明符
register
表示对对象的访问速度要快尽可能这些建议的有效程度是实现定义。
(引用自ISO C标准N1570草案,第6.7.1节第6段)
将对象存储在CPU寄存器而不是内存中是实现这一目标的一种方法,但不是唯一的方法。
现代编译器(至少根据常识)可能比你更擅长决定哪些变量应该存储在寄存器中以提高速度,所以使用register
关键字可能除了干扰编译器的优化之外不会做任何事情。
register
还规定获取对象的地址是非法的(即使它存储在内存中)。
它基本上是早期编译器(20世纪70年代)的遗留,没有执行现代编译器所做的复杂优化。对于这样的编译器,register
可以显著提高性能。
(我相信,现代编译器首先假设所有变量都可以在寄存器中分配,并且仅在必要时才将它们"溢出"到内存中,要么是因为需要变量的地址,要么是因为没有足够的寄存器可用。)