32位与64位系统数据模型

32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。

而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。

现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数据模型,除了指针是64位,其他基本类型都没有变。



Data Type     ILP32      ILP64 LP64      LLP64

char              8             8            8            8

short            16           16 16          16

int                32           64 32          32

long             32           64        64          32

long long      64           64 64          64

pointer         32           64 64          64

在网上查资料,还看到一个LP32(long point 64)模型,就是int是16位的。

这个从来没有用到过。

绝大部分64位的Unix,linux都是使用的LP64模型;

64位的Windows使用的是LLP64(long long and point 64)模型。

另外,在网上看到一个资料:

float    都是4字节;

double    都是8字节;(C中直接写小数,默认是double型)




TYPE               LP32  ILP32  LP64  ILP64  LLP64


CHAR                8         8          8         8         8

SHORT             16       16        16       16       16

INT                  16       32        32        64      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位,LLP指long long和pointer是32-bit的。ILP32指int,long和pointer是32位的,LP32指long和pointer是32位的。

你可能感兴趣的:(32位与64位系统数据模型)