现在我正在学习存储类https://www.tensorflow.org/versions/r0.9/api_docs/python/nn.html#convolution。他似乎也为自动存储类和寄存器存储类解释了同样的事情。他在两者之间唯一的区别是寄存器存储类存储在CPU寄存器中。这些存储类之间是否有任何差异?寄存器存储类的任何用途?在某些C编译器上默认是注册关键字thier吗?
register int x = 5;
auto int y = 3;
答案 0 :(得分:4)
register
存储类并不意味着该对象将存储在寄存器中。标准说:
具有存储类的对象的标识符声明 说明符
register
表明对对象的访问速度一样快 尽可能。这些建议有效的程度如下 实现定义的。
(报价来自ISO C标准的N1570草案,第6.7.1节第6段。)
将对象存储在CPU寄存器而不是内存中是实现此目的的一种方法,但不是唯一的方法。
现代编译器(至少根据常识)可能比决定哪些变量应存储在寄存器中以提高速度更好,因此使用register
关键字可能不会做任何其他事情而不是干扰编译器的优化。
register
也使获取对象的地址成为非法(即使它存储在内存中)。
它基本上是早期编译器(1970年代)的延续,它没有执行现代编译器所做的复杂优化。对于这样的编译器register
可以显着提高性能。
(我认为,现代编译器首先假设所有变量都可以在寄存器中分配,并且只有在必要时才将它们溢出到内存中,因为需要变量的地址或者因为没有足够的寄存器可用。)