gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:20:35 25 4
gpt4 key购买 nike

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

这不正是 int_fast16_t 的 C99 定义吗?

也许他们把它放在那里只是为了保持一致性,因为还需要其他 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 会崩溃。但是,如果 64 位值在 x86-64 上更快,则 int_fast32_t 可能是 64 位数字。 (我认为实际情况并非如此,但它只是证明了这一点)

最佳答案

int 是速度/大小方面“最有效的类型”——但 C 规范并未指定。它必须是 16 位或更多位。

int_fast16_t 是速度最高效的类型,至少在 16 位 int 的范围内。

示例:出于多种原因,给定平台可能决定 int 应该是 32 位,而不仅仅是速度。对于 16 位整数,同一系统可能会发现不同的类型是最快的。

示例:在 64 位机器中,人们希望将 int 作为 64 位,编译器可能会使用具有 32 位 int 编译的模式为了兼容性。在这种模式下,int_fast16_t 可以是 64 位,因为它本身是最快的宽度,因为它避免了对齐问题等。

关于c - "int"和 "int_fast16_t"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30942107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com