The following table compares characteristics of the two data models.
When RTBND(*DEFAULT) is in effect: | When RTBND(*LLP64) is in effect: |
---|---|
Binding directory QSYS/QYPPLR510 is used. | Binding directory QSYS/QYPPLR510T is used. |
Service programs QYPPRT370, QYPPSL510, and QYPPWL530 are used. | Service programs QYPPRT510T, QYPPSL510T, and QYPPWL530T are used. |
The size of the this pointer depends on the effective data model of the class declaration. | The size of this pointer is 8 bytes, regardless of the data model class declaration. All internal compiler-generated structures are assumed to be 8-byte pointers. That is the case even when the class declaration is surrounded by #pragma datamodel(P128). |
16-byte-compatible sections of C++ standard library header files are used. | 8-byte-compatible sections of C++ standard library header files are used. |
All internal structures (for example virtual function tables) use 16-byte pointers. | All internal structures (for example virtual function tables) use 8-byte pointers. |
All C++ programs and C++ service programs can contain only modules that have been built with the RTBND(*DEFAULT) option. | All C++ programs and C++ service programs can contain only modules built that have been built with the RTBND(*LLP64) option. |
Standard name mangling is in effect. | Demangling code written for 16-byte library does not work because a new
ABI name mangling scheme is used instead. The ABI name mangling scheme
prevents binding of modules that were not built with RTBND(*LLP64).
|
A derived class must be of the same data model as the base class. | |
Declaration of main() must be consistent with the data model option used when the module is compiled. See Maintaining Consistent Argument Declarations. | |
A function declared with a variable argument list is governed by the data model in effect when the argument list is declared. The argument list variables must always be consistent in terms of the size of pointer variables. ILE C/C++ compilers provide one level of pointer conversions of pointers in the variable list. | |
A class or structure uses the data model in effect when that class or structure is fully declared. This data model may be different from the data model in effect when that same class or structure is forward-declared. See Example: Effect of Forward Declarations on the Data Model. | |
An unprototyped function has its signature inferred by the data model in
effect at the time of its first reference.
![]() | |
![]() | |
![]() | |
![]() | |
The address of (&) operator returns an 8-byte result. | |
Intermixing of pointer sizes in source code is allowed to permit use of the many system APIs that still use 16-byte pointers in structures and function prototypes. | |
Using an array in pointer context is the same as taking the address of
the first element in the array. The size of the address is 8-byte
if the storage model is teraspace.
|
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.