Characteristics of Each Teraspace Storage Model

The following table compares characteristics of the two data models.

Table 1. Characteristics of the Default Teraspace Storage Model Versus the RTBND(LLP64) Teraspace Storage Model
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. C language only The C runtime functions might produce unpredictable results if the header files are not included.
C++ language only Reference types are 8 bytes in length only when the data model is LLP64.
C++ language only 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.
C++ language only 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.