在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是

What is a good example of leveraging the differences between int*_t, int_fast*_t and int_least*_t in C++11?

本文关键字:int 很好 一个 least C++11 fast 之间      更新时间:2023-10-16

根据在线文档,这些固定宽度的整数类型之间存在差异。对于int*_t我们将宽度固定为*的值。然而,对于其他两种类型,描述中使用形容词最快和最小来请求基础数据模型提供的最快或最小实例。

">

最快"或"最小"的客观含义是什么?在哪些方面这样做是有利的,甚至是必要的?

"最快"没有客观含义;它基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不总是最快的(例如,如果 10 亿个条目数组是 8 位值,则处理速度可能会更快,但uint_fast8_t可能是 32 位值,因为 CPU 寄存器操作对于该大小进行得更快(。

">

最小">通常意味着"与请求的位大小相同",但在可供选择的大小值有限的奇怪架构上(例如,旧的 Crays 将所有内容都作为 64 位类型(,int_least16_t可以工作(并无缝成为 64 位值(,而编译器可能会在int16_t出错(因为不可能在那里制作真正的 16 位整数值(。

要点是,如果您依赖于溢出行为,则需要使用精确的固定宽度类型。否则,您可能应该默认为least类型以获得最大的可移植性,在热代码路径中切换到fast类型,但需要分析来确定它是否真的有任何区别。

相关文章: