关于c ++:什么决定了C中整数的大小?

What determines the size of integer in C?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
size of int, long, etc
Does the size of an int depend on the compiler and/or processor?

我不确定以前是否有人问过类似的问题(至少,我在搜索时找不到,所以想问问自己)。

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


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

因此,不严格地说,int的大小是目标硬件和操作系统的属性(同一硬件上的两个不同的操作系统可能具有不同的int大小,在两个不同的机器上运行的同一个操作系统可能具有不同的int大小;这两种操作系统都有合理的常见示例)。

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


int是平台的"自然"尺寸,实际上,这意味着

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

  • 向后兼容现有代码基的大小(例如,win64中的32位int)。

编译器供应商可以自由选择使用≥16位值的任何大小,但(对于桌面平台和更高版本)不适用于操作系统API的大小意味着如果出售编译器的任何副本,那么就很少。;-)


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

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

  • sizeof运算符告诉您对象的大小(以字节为单位)
  • CHAR_BITSfrom limits.h告诉您每个字节的位数

因此,sizeof(foo) * CHAR_BITS告诉您类型foo的大小,以位为单位,包括填充。

其他的只是假设。请注意,主机环境也可能由10000名带袖珍计算器的中国人和一块巨大的黑板组成,将尺寸限制从稀薄的空气中拉出来。


所以除了维基百科,几乎什么都不知道…见整数(计算机科学)

注(b)表示:"C/C++中的短、长、长的大小取决于语言的实现;依赖于数据模型,即使是短的也可以是从16位到64位的任何东西。对于某些通用平台:在旧的16位操作系统上,int为16位,long为32位。在32位Linux、DOS和Windows上,int和long是32位,long long是64位。对于运行32位程序的64位处理器也是如此。在64位Linux上,int是32位,long和long long是64位。"