Characteristics of Each Teraspace Storage Model
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).
Note: If names in one or more
modules are explicitly crafted to defeat name mangling, incompatibilities
can occur.
|
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 C runtime functions might produce unpredictable results if the header files are not included. | |
Reference types are 8 bytes in length only when the data model is LLP64. | |
A template adopts the data model in effect when it is declared, and applies that data model to future instantiations of the template. All derived classes must be of the same data model as the base class. See Example: How a Template Adopts a Data Model. | |
A function signature is affected by the data model governing the class/function declaration. See Examples: Overloading Functions. | |
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.
Note: Arrays are not pointers, so they are not affected by pointer
modifiers.
|