【发布时间】:2020-04-24 05:18:23
【问题描述】:
我一直在考虑快速整数类型:
int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t、uint_fast8_t、uint_fast16_t、uint_fast32_t、uint_fast64_t
在过去的几天里,我问了一个关于为什么(如果是的话)这些类型比其他整数类型更快的问题:
Why are the fast integer types faster than the other integer types?
我现在进一步思考的是,如果:
- 更快的类型 在特定环境(依赖于实现/架构)上更快,因此该环境反映了该问题的理想环境,
-
register类的对象 存储在 CPU 的寄存器中(但通常在使用register类声明时并不总是需要存储在那里),它们是在相同的环境下速度更快,并且 -
CPU 的一个寄存器能够保存所需的整数值,
- 如果使用
register存储类声明,快速整数类型是否会更快?
- 如果使用
喜欢:
register int_fastY_t i;
*(暗示上述前提。)
或者它们会相互干扰并降低性能?
【问题讨论】:
-
请注意
register在 C++ 中不可用。如果您询问这些类型的变量,则应删除 C++。 -
@NathanOliver C++ 中是否有等效的东西来声明对象应存储在 CPU 的寄存器中?
-
请注意,
register说明符在 C++11 中被弃用,在 C++17 中被移除。 不要使用它。 -
"在 C++ 中是否有等效的东西来声明对象应存储在 CPU 的寄存器中?" - 不。您应该将寄存器分配留给您的编译器。在任何情况下,它都会比你做得更好(很可能)。
-
C 2018 6.7.1 6 表示“使用存储类说明符
register为对象声明标识符建议尽可能快地访问该对象。这些建议的有效程度是由实施定义的。”仅此而已,一个建议。它不需要实现将值存储在寄存器中,而且它对好的现代编译器的用处是有限的——它们已经很好地优化了。
标签: c performance integer cpu-registers