LP64指的是LONG/POINTER字长为64位;
ILP64指的是INT/LONG/POINT字长为64位;
LLP64指的是LONGLONG/POINTER字长为64位;
ILP32指的是INT/LONG/POINTER字长为32位;
LP32指的是LONG/POINT字长是32位的,INT字长为16位.
注1:32位Windows采用的是ILP32数据模型,64位Windows采用LLP64数据模型.
注2:32位的Linux/Unix使用ILP32数据模型,64位Linux/Unix使用LP64数据模型.
注3:为了增加代码的移植性,打印无符号整形数,不管申明时是如何定义的,统一使用 %lu.
注4:为了保证平台的通用性,代码中尽量不要使用long数据库型.
注5:使用INT时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如:64位机器上长度为8字节,32位机器上长度为4字节.
注6:编写代码时要尽量使用sizeof来计算数据类型的大小.
注7:ssize_t和size_t分别是signsize_t和unsigned signed size of computer word size.它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型,从某种意义上来说它们等同于intptr_t和 uintptr_t.
WINDOWS下数据类型,定义如下:
类型
定义
类型
定义
DWORD32
32位无符号整数
DWORD64
64位无符号整数
INT32
32位有符号整数
UINT32
32位无符号整数
INT64
64位有符号整数
UINT64
64位无符号整数
LONG32
32位有符号整数
ULONG32
32位无符号整数
LONG64
64位有符号整数
ULONG64
64位无符号整数
DWORD_PTR
指针精度无符号长整型
HALF_PTR
指针大小的一半,有符号
UHALF_PTR
指针大小的一半,无符号
INT_PTR
指针进度有符号整数
UINT_PTR
指针进度无符号整数
LONG_PTR
指针进度的有符号长整型
ULONG_PTR
指针进度的无符号长整型
SIZE_T
指针可用的最大字节数
SSZIE_T
有符号SIZE_T
LPARAM
与LONG_PTR为同义词
WParm
与UINT_PTR为同义词
POINTER_32
32位指针类型
POINTER_64
64位指针类型