ILP32 and LP64 data models and data type sizes
Table 1 compares data models and data type sizes
of ILP32 and LP64 environments.
ILP32 (32-bit environment) | LP64 (64-bit environment) |
---|---|
Data model ILP32 (32-bit pointer) | Data model LP64 (64-bit pointer) |
int , long , ptr ,
and off_t are all 32 bits (4 bytes) in size. |
int is 32 bits in size. long , ptr ,
and off_t are all 64 bits (8 bytes) in size. |
The 32-bit data model for z/OS® XL C/C++ compilers is ILP32 plus long long. This data model uses the 4/4/4 data type size model and includes a long long
type. Table 2 compares
the type sizes for the different models.
LP64 is the 64-bit data model chosen by the Aspen working group (formed by X/OPEN and a consortium of hardware vendors). LP64 is short for long-pointer 64. It is commonly referred to as the 4/8/8 data type size model and includes the integer/long/pointer type sizes, measured in bytes.
Data Type | 32-bit sizes (in bytes) | 64-bit sizes (in bytes) | Remarks |
---|---|---|---|
char | 1 | 1 | |
short | 2 | 2 | |
int | 4 | 4 | |
long | 4 | 8 | |
long long | 8 | 8 | |
float | 4 | 4 | |
double | 8 | 8 | |
long double | 16 | 16 | |
pointer | 4 | 8 | |
wchar_t | 2 | 4 | Other UNIX platforms usually have wchar_t 4 bytes for both 32-bit and 64-bit mode. |
size_t | 4 | 8 | This is an unsigned type. |
ptrdiff_t | 4 | 8 | This is a signed type. |