9.4.2 Passing Classes Directly on Various Processors
Classes and unions that are passed directly by the C++ compiler are
passed exactly as the C compiler would pass a struct or union.
However, C++ structs and unions are passed differently on different architectures.
Table 9-1 Passing of Structs and Unions by Architecture
| |
SPARC V7/V8
| Structs and unions are passed and returned by allocating storage within
the caller and passing a pointer to that storage. (That is, all structs and
unions are passed by reference.)
|
SPARC V9
| Structs with a size no greater than 16 bytes (32 bytes) are passed (returned)
in registers. Unions and all other structs are passed and returned by allocating
storage within the caller and passing a pointer to that storage. (That is,
small structs are passed in registers; unions and large structs are passed
by reference.) As a consequence, small value classes are passed as efficiently
as primitive types.
|
x86 platforms
| Structs and unions are passed by allocating space on the stack and copying
the argument onto the stack. Structs and unions are returned by allocating
a temporary object in the caller’s frame and passing the address of
the temporary object as an implicit first parameter.
|
|