C中整数的大小

时间:2010-11-21 06:15:46

标签: c sizeof specifications

ANSI C规范是否要求int的大小等于系统的字大小(32位/ 64位)?

换句话说,我可以根据分配给int的空间来破译系统的字大小吗?

4 个答案:

答案 0 :(得分:6)

int类型的大小取决于实现,但不能短于16位。请参阅Minimum Type Limits部分here

This Linux内核开发站点claimslong类型的大小保证是机器的字大小,但该语句可能是错误的:我不能在标准中找到对此的任何确认,并且long在Win64系统上只有32位宽(因为这些系统使用LLP64数据模型)。​​

答案 1 :(得分:3)

语言规范建议int应具有硬件平台的自然“字”大小。但是,并非严格要求。如果您注意到,为了简化32位到64位代码转换,一些现代实现更喜欢将int保留为32位类型,即使底层硬件平台具有64位字大小。

正如弗雷德里克已经指出的那样,无论如何,这个尺寸可能不会小于16个值形成位。

答案 2 :(得分:1)

最初的意图是int将是字大小 - 最有效的数据处理大小。然而,往往会发生大量代码,假设int的大小是X位,并且当代码运行的硬件移动到更大的字大小时,粗心编写的代码将会中断。编译器供应商必须保持他们的客户满意,所以他们说“好吧,我们将像以前一样保持大小,但我们现在会做大做多”。或者,“啊......太多人抱怨我们做得更长,我们将创建一个long long类型,同时留下sizeof(int)== sizeof(long)”。所以,现在,这一切都很糟糕:

  

ANSI C规范是否要求int的大小等于系统的字大小(32位/ 64位)?

这个想法很多,但并不坚持。

  

换句话说,我可以根据分配给int的空间来破译系统的字大小吗?

不在实践中。

答案 3 :(得分:0)

您应该检查系统提供的limits.h头文件。 INT_MAX声明应该帮助您反向计算整数必须具有的最小大小。有关详细信息,请查看http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html