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

Posted ageovb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 语言数据模型(字长模型)的主要内容,如果未能解决你的问题,请参考以下文章

R语言生存分析生成仿真数据构建COX回归分析模型并计算C-index

Python数据模型及Pythonic编程

[架构之路-23]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 数据类型与数据定义(待续)

go中的数据结构切片-slice

C语言 字符串操作两头堵模型

R语言 广义加性模型GAM