C 什么决定了整数的大小?

C 什么决定了整数的大小?,c,compiler-construction,64-bit,sizeof,C,Compiler Construction,64 Bit,Sizeof,sizeof(int)在我的Dev Cpp上显示4,即使它在64位机器上运行。为什么它不考虑底层HW和显示8呢?另外,如果我的编译环境也更改为64位(64位编译器首先有意义吗?),那么int的大小会更改吗 是否有任何标准来决定这一点?取自(在64位数据模型下) 有各种各样的型号,微软决定sizeof(int)==4,有些(少数)其他的没有 Solaris到SPARC64和Unicos的HAL计算机系统端口似乎是唯一sizeof(int)==8的端口。它们被称为ILP64和SILP64型号 真正的

sizeof(int)
在我的
Dev Cpp
上显示4,即使它在64位机器上运行。为什么它不考虑底层HW和显示8呢?另外,如果我的编译环境也更改为64位(64位编译器首先有意义吗?),那么int的大小会更改吗

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

取自(在
64位数据模型下)

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

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

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

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

请注意,编程模型是在每个编译器的基础上做出的选择,几个模型可以在同一操作系统上共存。然而,选择作为OS API主要模型的编程模型通常占主导地位


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

操作系统API占主导地位的原因是,如果要调用dll或类似文件(包括系统调用),则调用者和被调用者需要就参数的大小达成一致。能够进行系统调用的C实现通常比不能进行系统调用的C实现更有用,因此人们使用操作系统ABI,除非有理由不这样做。64位Windows可以运行32位可执行文件,这一点要归功于它们(除其他外)提供了程序需要调用的所有内容的32位版本。将
int
64位和
char
8位,意味着不能同时拥有16位和32位预定义的整数类型(除非您求助于扩展整数类型,但大多数编译器实现人员还没有这样做)。