3

int 的大小是如何决定的?

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

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

4

6 回答 6

8

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

sizeof(char) == 1

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

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

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

于 2012-10-05T04:56:07.487 回答
3

这取决于编译器。

例如:尝试使用旧的 turbo C 编译器,它会为 int 提供 16 位的大小,因为在编写编译器时字长(处理器可以轻松解决的大小)为 16。

于 2012-10-05T04:55:18.790 回答
0

整数的大小基本上取决于architecture您的系统。一般来说,如果你有一16-bit台机器,那么你的compiler意志必须支持 intsize 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
于 2012-10-05T08:31:26.120 回答
0

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

于 2012-10-05T05:09:48.373 回答
0

尽可能int宽不是最好的选择。(选择由ABI设计人员做出。)

像 x86-64 这样的 64 位架构可以int64_tlong. (Microsoftlong在其 x86-64 ABI 中保留 32 位,出于各种可移植性原因,考虑到现有的代码库和 API,这很有意义。这基本上是无关紧要的,因为应该使用真正关心类型大小的可移植代码,而int32_t不是int64_t对. )intlong

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

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

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

此外,需要有一个 32 位整数类型的名称,forint32_t是一个typedeffor。

于 2016-03-21T21:39:33.577 回答
-1

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

于 2013-02-07T06:16:49.977 回答