相关疑难解决方法(0)

"int"和"int_fast16_t"有什么区别?

据我了解,C规范说该类型int应该是目标平台上包含至少16位的最有效类型.

那不就是C99的定义int_fast16_t吗?

也许他们只是为了保持一致而把它放在那里,因为int_fastXX_t需要另一个?

更新

总结下面的讨论:

  • 我的问题在许多方面都是错误的.C标准没有为int指定位数.它给出了必须包含的范围[-32767,32767].
  • 我开始意识到,大多数人会说,"但这个范围至少意味着16位!" 但是C不需要二进制补码(甚至是二进制)整数存储.如果他们说"16位",可能会有一些平台具有1位奇偶校验,1位符号和14位幅度,仍然"符合标准",但不满足该范围.
  • 标准没有说int是最有效的类型.除了上面的大小要求之外,int可以由编译器开发人员根据他们认为最重要的标准来决定.(速度,大小,向后兼容性等)
  • 另一方面,int_fast16_t就像向编译器提供一个提示,它应该使用对性能最佳的类型,可能以牺牲任何其他权衡为代价.
  • 同样,int_least16_t会告诉编译器使用> = 16位的最小类型,即使它会更慢.适用于保留大型阵列和空间中的空间.

示例: x86-64上的MSVC具有32位int,即使在64位系统上也是如此.MS选择这样做是因为太多人认为int总是正好是32位,因此很多ABI会破坏.但是,如果x86-64上的64位值更快,则int_fast32_t可能是64位数.(我不认为实际情况如此,但它只是证明了这一点)

c int portability c99 c89

38
推荐指数
3
解决办法
6431
查看次数

标签 统计

c ×1

c89 ×1

c99 ×1

int ×1

portability ×1