如何确定int的大小?
int的大小是否真的取决于处理器。对于32位机器,它将是32位,对于16位,它是16位。
在我的机器上它显示为32位,虽然机器安装了64位处理器和64位Ubuntu。
答案 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_t
和int
进行假设。)
long
int
实际上可以在许多情况下提供更好,更高效的代码。 int32_t
数组每个元素仅使用4B只有int
数组的缓存占用量的一半。此外,特定于x86-64,32位操作数大小是默认值,因此64位指令需要额外的代码字节用于REX前缀。因此,32位(或8位)整数的代码密度比16位或64位更好。 (有关文档/指南/学习资源的链接,请参阅x86 wiki。)
如果程序需要64位整数类型才能正确操作,则不会使用int64_t
。 (将指针存储在int
而不是int
中是一个错误,我们不应该让ABI更糟以适应这样的破坏代码。)编写intptr_t
的程序员可能会发生预期32位类型,因为大多数平台都是这样工作的。 (标准当然只保证16位)。
由于没有期望int
一般为64位(例如在32位平台上),并且使其为64位会使某些程序变慢(并且几乎没有程序更快),int
在大多数64位ABI中是32位。
此外,还需要一个32位整数类型的名称,int
为int32_t
。
答案 5 :(得分:-1)
是。 int
大小取决于编译器大小。
对于16位整数,整数的范围在-32768到32767之间。对于32&amp;它会增加64位编译器。