C/C++教程

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

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

这篇关于【C 语言】数据模型(字长模型)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!