[Home]   [TOC]

Study_Programming_Type  
Programming
Updated Jan 12, 2014 by jht5...@gmail.com

C/C++/Java/C#的基础类型模型的定义[2]

DATETYPE LP32 ILP32 LP64 ILP64 LLP64 JAVA C#
CHAR 8 8 8 8 8 16 16
BYTE N/A N/A N/A N/A N/A 8 8
SHORT 16 16 16 16 16 16 16
_INT32 N/A 32 N/A N/A N/A N/A N/A
INT 16 32 32 64 32 32 32
LONG 32 32 64 64 32 64 64
LONG LONG 64 64 64 64 64 N/A N/A
POINTER 32 32 64 64 64 N/A N/A
FLOAT 32 32 32 32 32 32 32
DOUBLE 64 64 64 64 64 64 64
BOOL T/F T/F T/F T/F T/F T/F T/F

上表中,LP64、ILP64、LLP64是64位平台上字长的数据模型,ILP32和LP32是32位平台上字长的数据模型。

  • 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。

参考资料

[1]. http://www.yankay.com/go-clear-concurreny/
[2]. http://www.blogjava.net/jxlazzw/archive/2012/11/30/392280.html
[3]. http://blog.sae.sina.com.cn/archives/2054