__ptr32
The keyword __ptr32 is a qualifier that can be applied to a pointer type to
constrain its size to 32 bits. This language extension is provided to facilitate porting structures
with pointer members from 31- to 64-bit mode.
The size of a pointer type doubles to 64 bits in 64-bit mode. Doubling the size of a pointer changes the layout of a structure that contains pointer members. If the object referenced by a pointer member resides within a 31-bit addressing space, constraining the pointer to 32 bits can reduce some of the unexpected effects of moving to 64-bit mode.
__ptr32 keyword can appear in the declarator part of a pointer declaration,
wherever a CV-qualifier can be used. For example, the following statement declares
p to be a 32-bit pointer to
int:int * __ptr32 p;q to be a 64-bit pointer to a 32-bit pointer to
int:int * __ptr32 *q;r to be a const 32-bit
pointer:int * __ptr32 const r;Pointers with external linkage must be __ptr32-qualified consistently across all
compilation units. If a pointer is declared 32-bit in one compilation unit and 64-bit in another,
the behavior is undefined.
An explicit cast must be used for the assignment of 32-bit and 64-bit pointers to each other. Otherwise, incorrect code might be generated.
A 32-bit pointer is promoted to a 64-bit pointer when it is used as the argument of a
function.
A
__ptr32-qualified type must not be used in the parameter list of overloaded
functions or as type parameter of a template. 
__ptr32 pointer is dereferenced, a 64-bit address is formed by
filling the 33 missing high-order bits with zeros. The program using that address should make sure
that it is valid within the address space of the application.