C++ プログラミングガイド

各種のプロセッサでクラスを直接渡す

C++ コンパイラによって直接渡されるクラス (と共用体) は、C コンパイラが構造体 (または共用体) を渡す場合とまったく同じように渡されます。しかし、C++ の構造体と共用体の渡し方は、アーキテクチャによって異なります。

SPARC V7 および V8 では構造体と共用体は、呼び出し元で記憶領域を割り当て、ポインタをその記憶領域に渡すことによって渡されます (つまり、構造体と共用体はすべて参照により渡されます)。

SPARC V9 では、16 バイト (32 バイト) 以下の構造体は、レジスタ中で渡され (返され) ます。共用体と他のすべての構造体は、呼び出し元で記憶領域を割り当て、ポインタをその記憶領域に渡すことによって渡され (返され) ます (つまり、小さな構造体はレジスタ中で渡され、共用体と大きな構造体は参照により渡されます)。この結果、小さな値のクラスは基本の型と同じ効率で渡されることになります。

x86 では、構造体と共用体を渡すには、スタックで領域を割り当て、引数をそのスタックにコピーします。構造体と共用体を返すには、呼び出し元のフレームに一時オブジェクトを割り当て、一時オブジェクトのアドレスを暗黙の最初のパラメータとして渡します。