int变量的大小

如何确定int的大小?

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

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

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

sizeof(char) == 1 

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

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

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

这取决于编译器。

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

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

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

更多细节,

  • data bus的概念是图片,16位,32位意味着系统size of data bussize 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 

尽可能扩大int并不是最好的选择。 (选择由ABI设计师完成。)

像x86-64这样的64位架构可以在int64_t上高效运行,因此很自然地long 64位。 (由于各种可移植性原因,微软在x86-64 ABI中long 32位,这在现有的代码库和API中是有意义的。这基本上是无关紧要的,因为实际关心类型大小的可移植代码应该使用int32_tint64_t而不是假设关于intlong 。)

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

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

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

此外,还需要一个32位整数类型的名称,因为int32_t是一个typedef

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