LP32 ILP32 LP64 LLP64 ILP64

Posted lh03061238

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LP32 ILP32 LP64 LLP64 ILP64相关的知识,希望对你有一定的参考价值。

数据模型(LP32 ILP32 LP64 LLP64 ILP64 )https://www.cnblogs.com/lsgxeva/p/7614856.html

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 位,与操作系统位数无关,这也是其跨平台性的体现。

以上是关于LP32 ILP32 LP64 LLP64 ILP64的主要内容,如果未能解决你的问题,请参考以下文章

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

Arm 32位程序向Arm 64位迁移

Arm 32位程序向Arm 64位迁移

Arm 32位程序向Arm 64位迁移

在ARM64下编程的常见陷阱:C语言常见陷阱

64位操作系统下,关于int和long占用字节数同为4问题