【问题标题】:Size of integer in C [duplicate]C中整数的大小[重复]
【发布时间】: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 位操作系统)。

【问题讨论】:

标签: c gcc int


【解决方案1】:

这取决于编译器、处理器和操作系统的组合。

例如,在 64 位 Intel CPU 上,在 64 位模式下,long int 在 Windows 中的大小为 4 字节,而在 Linux 和 Mac 中为 8 字节。 int 在 Intel 的所有三个操作系统中都是 4 个字节。

编译器实现者也有选择,但通常使用操作系统使用的。但很可能一个编译器供应商在所有三个平台上都有 C 编译器决定在所有三个平台上使用相同的大小。

当然,在 16 位 CPU 上使 int 4 个字节(尽管可能)是没有意义的。

所以这取决于你提到的所有三件事。

【讨论】:

  • FWIW,在 BBC Basic 中,在 8 位 6502 计算机上,整数为 32 位!
【解决方案2】:

取决于编译器选项
当然这也取决于编译器本身。
但是编译器是为特定的操作系统制作的,所以它取决于操作系统
和/或
编译器是为特定处理器制作的,因此它取决于处理器

【讨论】:

【解决方案3】:

int、long 等的大小取决于编译器,但编译器实现者将为特定处理器和/或操作系统选择最佳大小。

【讨论】:

    【解决方案4】:

    这取决于系统。我所说的系统是指处理器和操作系统的任意组合,但它通常与所使用处理器的“自然”整数大小有关。

    【讨论】:

    • 64 位 Intel 系统上的 int 除外。在 Windows、Linux 和 OS X 三大操作系统中,int 仍然是 32 位,而寄存器大小是 64 位。但是,long int 的大小在这些平台上有所不同。
    【解决方案5】:

    整数的大小是否取决于编译器、操作系统或处理器?

    是的。它可以依赖于任何这些东西。

    它实际上是由平台ABI定义的,由编译器和运行时库设置,但编译器在不同的操作系统或架构上使用不同的ABI。

    【讨论】:

      【解决方案6】:

      int 的大小以及几乎所有其他类型在 C 中的大小都是由实现定义的。某些编译器可能会在特定平台上做出保证,但这取决于实现。这不是你应该依赖的东西

      【讨论】:

      • 这可能是一个愚蠢的语义点,但在 C 中,int 的大小是实现定义的,而不是未定义的。实现定义意味着实现必须与它所做的选择保持一致,并且必须在某处记录它的选择,而未定义意味着所有赌注都没有,编译器可以不一致和任意决定。
      猜你喜欢
      • 2020-11-28
      • 2018-05-12
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多