数据类型&数据模型
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。
现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数据模型,除了指针是64位,其他基本类型都没有变。
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 |
在这张表中,LP64,ILP64,LLP64是64位平台上的字长模型,ILP32和LP32是32位平台上的字长模型。
- LP64意思是long和pointer是64位,
- ILP64指int,long,pointer是64位,
- LLP64指long long和pointer是64-bit的。
- ILP32指int,long和pointer是32位的,
- LP32指long和pointer是32位的。
float 都是4字节;double 都是8字节;(C中直接写小数,默认是double型)