注册与自动存储类?

时间:2016-06-29 22:27:15

标签: c storage-class-specifier

现在我正在学习存储类https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#convolution。他似乎也为自动存储类和寄存器存储类解释了同样的事情。他在两者之间唯一的区别是寄存器存储类存储在CPU寄存器中。这些存储类之间是否有任何差异?寄存器存储类的任何用途?在某些C编译器上默认是注册关键字thier吗?

register int x = 5;
auto int y = 3;

1 个答案:

答案 0 :(得分:4)

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

  

具有存储类的对象的标识符声明   说明符 register 表明对对象的访问速度一样快   尽可能。这些建议有效的程度如下   实现定义的。

(报价来自ISO C标准的N1570草案,第6.7.1节第6段。)

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

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

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

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

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

相关问题