数据模型 (LP32 ILP32 LP64 LLP64 ILP64 )

转自: http://blog.csdn.net/foreverfresh/article/details/6731785


32位环境涉及"ILP32"数据模型,是因为C数据类型为32位的int、long、指针。而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作"LP64"数据模型。

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

 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


1> 平台: VS2010 + window7(64位系统)
                   GCC (4.4.6) + Redhat 6.3 (64 位系统)
 
2> VS2010默认生成32位的程序,设置VS2010 ,使其编译出64位程序
   
3> 代码:

int main()
{
printf("sizeof(char *) = %ld\n", sizeof(char *));            //result = 8;

printf("sizeof(long long) = %ld\n", sizeof(long long));  //result = 8;

printf("sizeof(long) = %ld\n", sizeof(long));                   // windows result = 4, but  linux result = 8
return 0;
}


4> VS2010 输出结果是     8 , 8, 4
      linux GCC 输出结果是 8, 8, 8

你可能感兴趣的