【C 语言】数据模型(字长模型)

因为 C 语言只规定了,long 型占用字节数不小于 int 型, int 型不小于 short 型,所以不同的编译器对于每种数据类型就有不同的实现。
数据(字长)模型是编译器用来确定基本数据类型长度的,有 LP64、ILP64、LLP64、ILP32、LP32。

  • I:int
  • L:long
  • P:pointer
  • LL:long long
  • 64:上述类型字长 64
  • 32:上述类型字长 32
Data Type ILP32 LP32 ILP64 LP64 LLP64
宏定义 _ _ _ LP64 LLP64
平台 Win32 API / Unix 和 Unix 类的系统 (Linux,Mac OS X) Win16 API Unix 和 Unix 类的系统 (Linux,Mac OS X) Win64 API
char 8 8 8 8 8
short 16 16 16 16 16
int 32 32 64 32 32
long 32 32 64 64 32
long long 64 64 64 64 64
pointer 32 32 64 64 64

结论:
1、32 位 Windows 和类 Unix 使用 ILP32 字长模型,64 位 Windows 使用 LLP64 模型,64 位类 Unix 使用 LP64 字长模型。
2、根据 1,long 在 32 位和 64 位 Windows 上永远是 4 字节,在 32 位类 Unix 上是 4 字节,在 64 位类 Unix 上是 8 字节。
3、其他基本类型 Windows 和类 Unix 字长一致。

也就是说:
32 位 Windows 和类 Unix(UNIX/Linux/MacOS X)均采用 ILP32 字长(数据)模型。
64 位 Windows 采用的是 LLP64 数据模型,64 位采用的是 LP64 数据模型。

Java 语言规定了 int 是 32 位,long 是 64 位,与操作系统位数无关,这也是其跨平台性的体现。

上一篇:信息安全系统设计与实现第一周:《Unix/Linux系统编程》第一、二章学习笔记


下一篇:第一、二章读书笔记