【发布时间】:2011-03-10 05:50:08
【问题描述】:
整数的大小取决于什么?
C 中的 int 变量的大小取决于机器还是编译器?
【问题讨论】:
-
我认为正确的术语是“依赖于实现”。
-
是否依赖于16位或32位的处理器??
标签: c
整数的大小取决于什么?
C 中的 int 变量的大小取决于机器还是编译器?
【问题讨论】:
标签: c
它依赖于实现。 C 标准只要求:
char 至少有 8 位short 至少有 16 位int 至少有 16 位long 至少有 32 位long long 至少有 64 位(1999 年添加)在 16/32 位时代,事实上的标准是:
int 是“本机”整数大小但是,64 位系统通常不将int 设为 64 位,这会造成具有三个 64 位类型而没有 32 位类型的尴尬情况。 一些编译器将long扩展为64位。
【讨论】:
形式上,所有基本数据类型(包括它们的大小)的表示都依赖于编译器,并且仅依赖于编译器。编译器(或者更准确地说,是实现)可以充当程序和机器之间的抽象层,将机器完全隐藏在程序之外或以任何它喜欢的方式扭曲它。
但实际上,编译器旨在为给定的机器和/或操作系统生成最高效的代码。为了实现基本数据类型应该具有给定机器和/或操作系统的自然表示。从这个意义上说,这些表示间接依赖于机器和/或操作系统。
换句话说,从抽象、形式和迂腐的角度来看,编译器可以完全忽略特定于机器的数据类型表示。但这没有实际意义。在实践中,编译器充分利用了机器提供的数据类型表示。
不过,如果机器不支持某些数据类型,编译器仍然可以通过在编译器级别实现其支持(“模拟”它)向程序提供该数据类型。例如,64 位整数类型通常在 32 位机器的 32 位编译器中可用,即使机器不直接支持它们。过去,编译器通常会为未配备浮点协处理器(因此不直接支持浮点类型)的机器提供浮点类型的编译器级支持。
【讨论】:
这主要取决于编译器。例如,如果您有一个 64 位 x86 处理器,您可以使用旧的 16 位编译器得到 16 位整数,使用 32 位编译器得到 32 位整数,或者使用 64 位编译器得到 64 -位整数。
编译器针对特定处理器的程度取决于处理器,并且(例如)古老的 16 位处理器根本不会运行针对闪亮的新 64 位处理器的代码。
C 和 C++ 标准确实保证了一些最小尺寸(间接通过指定最小支持范围):
char: 8 bits
short: 16 bits
long: 32 bits
long long: 64 bits
还保证大小/范围按以下顺序严格不递减:char、short、int、long 和 long long1。
1long long 在 C99 和 C++0x 中指定,但一些编译器(例如 gcc、Intel、Comeau)也允许在 C++03 代码中使用它。如果你愿意,你可以说服大多数人(如果不是全部)拒绝 C++03 代码中的long long。
【讨论】:
正如 MAK 所说,它依赖于实现。这意味着它取决于编译器。通常,编译器以单台机器为目标,因此您也可以将其视为与机器相关的。
【讨论】:
AFAIK,数据类型的大小依赖于实现。这意味着完全由实现者(即编写编译器的人)来选择它将是什么。
所以,简而言之,它取决于编译器。但通常使用最容易映射到底层机器字长的任何大小更简单——因此编译器通常使用最适合底层机器的大小。
【讨论】:
无论您拥有什么硬件,这都取决于运行环境。如果您使用的是 DOS 等 16 位操作系统,那么它将是 2 个字节。在 Windows 或 Unix 等 32 位操作系统上,它是 4 个字节,依此类推。即使您在 64 位处理器上运行 32 位操作系统,大小也只有 4 个字节。我希望这会有所帮助。
【讨论】:
这取决于架构(机器、可执行类型)和编译器。 C 和 C++ 仅保证某些最小值。 (我认为这些是 char:8 位,int:16 位,long:32 位)
C99 包括某些已知的宽度类型,例如 uint32_t(如果可能)。见stdint.h
更新:解决了 Conrad Meyer 的顾虑。
【讨论】:
uint32_t 如果硬件支持 32 位整数,则必须为 32 位,如果不支持则根本不定义。如果您需要支持非 16/32/64 位系统,请改用 uint_leastN_t 类型。
整数变量的大小取决于编译器的类型:
如果您有 16 位编译器:
size of int is 2 bytes
char holds 1 byte
float occupies 4 bytes
如果您有 32 位编译器:
每个变量的大小在 16 位编译器中只是其大小的两倍
int hold 4 bytes
char holds 2 bytes
float holds 8 bytes
如果你有一个 64 位编译器,也会发生同样的事情,等等。
【讨论】: