【问题标题】:What is a good example of leveraging the differences between int*_t, int_fast*_t and int_least*_t in C++11?在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间差异的一个很好的例子是什么?
【发布时间】:2018-10-02 10:10:17
【问题描述】:

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

“最快”或“最小”的客观含义是什么?有什么例子说明这样做是有利的甚至是必要的?

【问题讨论】:

    标签: c++ c++11 integer fixed-width cstdint


    【解决方案1】:

    “最快”没有客观意义;它基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到架构的本机寄存器宽度,但这并不是总是最快的(例如,如果它是 8 位值,则处理 10 亿个条目的数组可能会更快,但@987654321 @ 可能是一个 32 位的值,因为 CPU 寄存器操作速度更快)。

    “最小”通常表示“与请求的位大小相同”,但在具有有限大小值可供选择的奇怪架构上(例如,旧的 Crays 有 everything 作为64 位类型),int_least16_t 可以工作(并且无缝地变成 64 位值),而编译器可能会在 int16_t 上出错(因为在那里不可能生成真正的 16 位整数值)。

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

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 2013-03-08
      • 2011-06-21
      • 2014-09-22
      • 2021-12-15
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多