什么决定C中整数的大小?

可能重复:
int大小,long等等
int的大小是否取决于编译器和/或处理器?

我不确定在SO之前是否有类似的问题(Atleast,我找不到任何搜索,所以想到问自己)。

什么决定了Cint (和其他数据类型)的大小。 我读过它取决于机器/操作系统/编译器,但还没有遇到任何覆盖另一个的东西的清晰/足够详细的解释等。任何解释或指针都会非常有帮助。


编译器最终会做到这一点,但为了让编译后的代码能够很好地与系统库配合使用,大多数编译器都会匹配用于构建目标系统的编译器的行为。

松散地说, int的大小是目标硬件和操作系统的属性(同一硬件上的两个不同操作系统可能具有不同的int大小,并且运行在两个不同机器上的相同操作系统可能具有不同大小的int ;两者都有相当常见的例子)。

所有这些也都受到C标准规则的制约。 int必须足够大以表示-3276732767之间的所有值。


int是平台的“自然”大小,实际上意味着其中的一个

  • 处理器的寄存器大小,或

  • 与现有代码库(例如Win64中的32位int )向后兼容的大小。

  • 编译器供应商可以自由选择任何大于等于16位值的大小,但对于不支持OS'API的大小(对于桌面平台或更高版本)而言,这意味着很少(如果有)编译器副本被销售。 ;-)


    C数据类型的大小受C标准的约束,通常受最小大小的限制。 主机环境(目标机器+操作系统)可能会施加进一步限制,即对最大大小的限制。 最后,编译器可以自由选择这些最小值和最大值之间的合适值。

    一般来说,假设C数据类型的大小被认为是不好的做法。 此外,没有必要,因为C会告诉你:

  • sizeof -operator告诉你一个对象的大小,以字节为单位
  • limits.h中的宏CHAR_BITS告诉你每个字节的位数
  • 因此, sizeof(foo) * CHAR_BITS告诉你类型foo的大小,以位为单位,包括填充。

    其他任何事情都只是假设。 请注意,主机环境也可能由10,000个中国人组成,这些中国人拥有袖珍计算器和一块巨大的黑板,可以凭空吸引大小。

    链接地址: http://www.djcxy.com/p/40393.html

    上一篇: What determines the size of integer in C?

    下一篇: What should be the sizeof(int) on a 64