【发布时间】:2012-03-13 17:32:32
【问题描述】:
sizeof(int) 在我的Dev Cpp 上显示 4,即使它在 64 位机器上运行。为什么它不考虑底层硬件并显示 8 呢?另外,如果我的编译环境也更改为 64 位(64 bit compiler 首先有意义吗?!),那么 int 的大小会改变吗?
有什么标准可以决定这一点吗?
【问题讨论】:
标签: c compiler-construction 64-bit sizeof
sizeof(int) 在我的Dev Cpp 上显示 4,即使它在 64 位机器上运行。为什么它不考虑底层硬件并显示 8 呢?另外,如果我的编译环境也更改为 64 位(64 bit compiler 首先有意义吗?!),那么 int 的大小会改变吗?
有什么标准可以决定这一点吗?
【问题讨论】:
标签: c compiler-construction 64-bit sizeof
取自http://en.wikipedia.org/wiki/64-bit(64-bit data models下)
有各种型号,微软决定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 主要模型的编程模型通常占主导地位。
【讨论】:
int 64 位和char 8 位意味着您不能同时拥有 16 位和 32 位的预定义整数类型(除非您使用 扩展整数类型,但大多数编译器实现者还没有这样做)。
虽然编译器最终决定整数的大小,但它通常被继承为 CPU 寄存器的大小,它将保存整数。许多处理器支持 32 位/64 位寄存器算术,编译器设置决定调用哪种模式。 至于sizeof(long)等,唯一的保证就是sizeof(long) >= sizeof(short)。
【讨论】: