【发布时间】:2011-11-03 01:23:27
【问题描述】:
可能重复:
Does the size of an int depend on the compiler and/or processor?
Integer 的大小是否取决于编译器、操作系统或处理器?如果我在 32 位操作系统或 64 位操作系统上都使用 gcc,在 32 位机器或 64 位机器上运行(在这种情况下只有 64 位操作系统)。
【问题讨论】:
可能重复:
Does the size of an int depend on the compiler and/or processor?
Integer 的大小是否取决于编译器、操作系统或处理器?如果我在 32 位操作系统或 64 位操作系统上都使用 gcc,在 32 位机器或 64 位机器上运行(在这种情况下只有 64 位操作系统)。
【问题讨论】:
这取决于编译器、处理器和操作系统的组合。
例如,在 64 位 Intel CPU 上,在 64 位模式下,long int 在 Windows 中的大小为 4 字节,而在 Linux 和 Mac 中为 8 字节。 int 在 Intel 的所有三个操作系统中都是 4 个字节。
编译器实现者也有选择,但通常使用操作系统使用的。但很可能一个编译器供应商在所有三个平台上都有 C 编译器决定在所有三个平台上使用相同的大小。
当然,在 16 位 CPU 上使 int 4 个字节(尽管可能)是没有意义的。
所以这取决于你提到的所有三件事。
【讨论】:
取决于编译器选项。
当然这也取决于编译器本身。
但是编译器是为特定的操作系统制作的,所以它取决于操作系统
和/或
编译器是为特定处理器制作的,因此它取决于处理器
【讨论】:
int、long 等的大小取决于编译器,但编译器实现者将为特定处理器和/或操作系统选择最佳大小。
【讨论】:
这取决于系统。我所说的系统是指处理器和操作系统的任意组合,但它通常与所使用处理器的“自然”整数大小有关。
【讨论】:
int 除外。在 Windows、Linux 和 OS X 三大操作系统中,int 仍然是 32 位,而寄存器大小是 64 位。但是,long int 的大小在这些平台上有所不同。
整数的大小是否取决于编译器、操作系统或处理器?
是的。它可以依赖于任何这些东西。
它实际上是由平台ABI定义的,由编译器和运行时库设置,但编译器在不同的操作系统或架构上使用不同的ABI。
【讨论】:
int 的大小以及几乎所有其他类型在 C 中的大小都是由实现定义的。某些编译器可能会在特定平台上做出保证,但这取决于实现。这不是你应该依赖的东西
【讨论】:
int 的大小是实现定义的,而不是未定义的。实现定义意味着实现必须与它所做的选择保持一致,并且必须在某处记录它的选择,而未定义意味着所有赌注都没有,编译器可以不一致和任意决定。