int变量的大小

时间:2012-10-05 04:53:16

标签: c int 32bit-64bit processor

如何确定int的大小?

int的大小是否真的取决于处理器。对于32位机器,它将是32位,对于16位,它是16位。

在我的机器上它显示为32位,虽然机器安装了64位处理器和64位Ubuntu。

6 个答案:

答案 0 :(得分:8)

这取决于实施。 C标准唯一保证的是

sizeof(char) == 1

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

以及类型的一些可表示的最小值,这意味着char至少为8位长,int至少为16位等等。

所以它必须由实现(编译器,操作系统,......)决定并记录下来。

答案 1 :(得分:2)

这取决于编译器。

例如:尝试一个旧的turbo C编译器&amp;它会为int提供16位的大小,因为在编写编译器时,字大小(处理器可以用最少的努力解决的大小)是16。

答案 2 :(得分:0)

这取决于主编译器。 如果你使用turbo c意味着整数大小是2个字节。 否则你使用GNU gccompiler意味着整数大小是4个字节。 它仅取决于C编译器中的实现。

答案 3 :(得分:0)

整数的大小基本上取决于系统的architecture。 通常,如果您拥有16-bit计算机,则compiler必须支持size 2 byte.的整数 如果您的系统是32位,则编译器必须支持4字节的整数。

更多细节,

  • data bus的概念进入图片是,16位,32位仅代表系统中的size of data bus
  • 数据总线大小是确定整数大小所必需的,因为数据总线的目的是为处理器提供数据。单次提取可以为处理器提供的最大值很重要,这个最大值编译器首选提供数据。
  • 根据系统的数据总线大小编译器 旨在提供数据总线的最大大小作为整数的大小。
x06->16-bit->DOS->turbo c->size of int->2 byte
x306->32-bit>windows/Linux->GCC->size of int->4 byte

答案 4 :(得分:0)

尽可能宽int不是最佳选择。 (由ABI设计师做出选择。)

像x86-64这样的64位架构可以在int64_t上高效运行,因此long自然是64位。 (微软在x86-64 ABI中将long保持为32位,出于各种可移植性原因,考虑到现有的代码库和API,这是有意义的。这基本上是不相关的,因为实际关心类型大小的可移植代码应该使用{{1 }和int32_t而不是对int64_tint进行假设。)

long int实际上可以在许多情况下提供更好,更高效的代码。 int32_t数组每个元素仅使用4B只有int数组的缓存占用量的一半。此外,特定于x86-64,32位操作数大小是默认值,因此64位指令需要额外的代码字节用于REX前缀。因此,32位(或8位)整数的代码密度比16位或64位更好。 (有关文档/指南/学习资源的链接,请参阅 wiki。)

如果程序需要64位整数类型才能正确操作,则不会使用int64_t。 (将指针存储在int而不是int中是一个错误,我们不应该让ABI更糟以适应这样的破坏代码。)编写intptr_t的程序员可能会发生预期32位类型,因为大多数平台都是这样工作的。 (标准当然只保证16位)。

由于没有期望int一般为64位(例如在32位平台上),并且使其为64位会使某些程序变慢(并且几乎没有程序更快),int在大多数64位ABI中是32位。

此外,还需要一个32位整数类型的名称,intint32_t

答案 5 :(得分:-1)

是。 int大小取决于编译器大小。 对于16位整数,整数的范围在-32768到32767之间。对于32&amp;它会增加64位编译器。