什么决定整数的大小?

时间:2012-03-13 17:32:33

标签: c compiler-construction 64-bit sizeof

sizeof(int)Dev Cpp上显示4,即使它在64位计算机上运行。为什么不考虑底层硬件并显示8呢?另外,如果我编译环境也改为64位(首先是64 bit compiler是否有意义?!),那么int的大小会改变吗?

是否有任何标准可以决定这一点?

2 个答案:

答案 0 :(得分:16)

取自http://en.wikipedia.org/wiki/64-bit64-bit data models下)

有各种型号,微软决定sizeof(int) == 4,其他一些(少数)没有。

Solaris到SPARC64和Unicos的HAL Computer Systems端口似乎是唯一sizeof(int) == 8的端口。它们被称为ILP64和SILP64型号。

真正的“战争”是sizeof(long),微软决定sizeof(long) == 4(LLP64),而其他几乎所有人都决定使用sizeof(long) == 8(LP64)。

请注意,实际上编译器“决定”使用哪个模型,但是在wiki中写的

  

请注意,编程模型是基于每个编译器的选择,并且几个可以在同一OS上共存。但是,选择作为OS API主要模型的编程模型通常占主导地位。

答案 1 :(得分:0)

虽然编译器最终决定一个整数的大小,但它通常作为CPU寄存器的大小继承,它将保存整数。许多处理器支持32位/ 64位寄存器算法,编译器设置决定调用哪种模式。 只要sizeof(long)等,唯一的保证是sizeof(long)> = sizeof(short)。