C 中数据类型的大小限制是如何确定的?
This question的回答说使用 limits.h
作为数据类型的最小值和最大值。虽然有些人可能会就此打住并说好吧,好吧,我在想:它怎么知道的? limits.h
中的限制是如何设置的,以便您可以在任何机器(任何环境?)上使用相同的 limits.h
。
显然,32 位机器处理事情的方式与 64 位机器不同。然后你就有了小端与大端的复杂层。它是怎么知道的(用简单的英语)?
最佳答案
首先,C标准规定了最低要求。例如,int
必须足够大,至少可以容纳 -32767 到 32767 之间的值。但是标准没有为编译器设置上限。
然后,无论谁将编译器移植到给定系统,都必须实现 limits.h
(以及 stdint.h
)以适应给定系统的编译器.
int
的大小传统上设置为 CPU 的数据总线宽度,或者更确切地说是 CPU 可以在单个指令中处理的最大可能大小。但这不是必需的 - 对于 64 位 CPU,编译器将 int
保留为 32 位,而是让 long
或 long long
成为 64 位类型.
此外,签名格式很重要。绝大多数现实世界的计算机都使用 2 的补码,因此 2 的补码系统上 16 位类型的下限是 -32768,而不是标准的最低要求 -32767。这是因为该标准接受一些其他非常奇特的符号格式。
然而,Endianess 在这里并不适用,因为这些 header 只涉及可变大小而不是单个字节的寻址。
关于c - limits.h 中的数据类型大小限制是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868953/