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?
我不确定以前是否有人问过类似的问题(至少,我在搜索时找不到,所以想问问自己)。
是什么决定了
最终编译器会这样做,但为了使编译后的代码能够与系统库很好地配合使用,大多数编译器都会匹配用于构建目标系统的编译器的行为。
因此,不严格地说,
所有这些都受到C标准中的规则的约束。例如,
处理器的寄存器大小,或
向后兼容现有代码基的大小(例如,win64中的32位
int )。
编译器供应商可以自由选择使用≥16位值的任何大小,但(对于桌面平台和更高版本)不适用于操作系统API的大小意味着如果出售编译器的任何副本,那么就很少。;-)
C数据类型的大小受C标准的约束,通常是对最小大小的约束。主机环境(目标机器+OS)可能会施加进一步的限制,即对最大大小的限制。最后,编译器可以自由地在这些最小值和最大值之间选择合适的值。
一般来说,假设C数据类型的大小是不好的做法。此外,这是不必要的,因为C会告诉你:
sizeof 运算符告诉您对象的大小(以字节为单位)- 宏
CHAR_BITS from limits.h告诉您每个字节的位数
因此,
其他的只是假设。请注意,主机环境也可能由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位。"