A data model defines the sizes assigned to standard data types. These data models are typically named using a XXXn pattern where X referes to a C type and n refers to a size (typically 32 or 64). ILP64, for example, means that int, long and pointer types are 64 bits wide, LP32 means that long and pointer are 32 bits wide, and LLP64 means that long long and pointer are 64 bits wide.
Data Type |
LP32 |
ILP32 |
ILP64 |
LLP64 |
LP64 |
|---|---|---|---|---|---|
char |
8 |
8 |
8 |
8 |
8 |
short |
16 |
16 |
16 |
16 |
16 |
int |
16 |
32 |
64 |
32 |
32 |
long |
32 |
32 |
64 |
32 |
64 |
long long |
|
|
|
64 |
|
pointer |
32 |
32 |
64 |
64 |
64 |
The following observations are derived from the Development Tutorial by Marco van de Voort [van de Voort 07]:
- Standard programming model for current (Intel family) PC processors is ILP32.
- One issue with
longin C was that there are both codebases that expect pointer andlongto have the same size, while there are also large codebases that expectintand long to be the same size. The compability model LLP64 was designed to preservelongandintcompability by introducing a new type to remain compatible with pointer (long long) - LLP64 is the only data model that defines a size for the
long longtype. - LP32 is used as model for the win-16 APIs of Windows 3.1.
- Most Unixes use LP64, primarily to conserve memory space compared to ILP64, including: 64-bit Linux, FreeBSD, NetBSD, and OpenBSD.
- Win64 uses the LLP64 model (also known as P64). This model conserves type compability between
longandint, but looses type compability betweenlongand pointer types. Any cast between a pointer and an existing type requires modification. - ILP64 is the easiest model to work with, because it retains compability with the ubiquitous ILP32 model, except specific assumptions that the core types are 32-bit. However this model requires significant memory, and both code and data size significantly increase.
References
[[van de Voort 07]] Marco van de Voort. Development Tutorial (a.k.a Build FAQ). January 29, 2007. http://www.stack.nl/~marcov/buildfaq.pdf![]()
[[Open Group 97]] Go Solo 2 - The Authorized Guide to Version 2 of the Single UNIX Specification. ISBN 0-13-575689-8. May 1997. http://www.unix.org/whitepapers/64bit.html![]()