このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

3.2 データ構造体とサイズ

効率的なコードを生成するには、ターゲット・プロセッサが定義したバイト位置合せの制約に従ってコンパイルする必要があります。 これは、ターゲット・プロセッサが設定した制約に反する構造体にならないように、ユーザー定義の構造体に埋込みバイトを追加する必要があることを意味します。 コンパイラによる埋込みの様子を次の例で説明します。 ここで、intは4バイト、shortは2バイト、charは1バイトとします。

 struct mydata {
    char C;
    long L;
    short B;
    long J;
}; 

図3.3は、4バイト境界に位置を合せるためにstruct mydataに埋込みが行われる様子を示しています。

図 3.3 メモリー位置合せと構造体の埋込み

この図は、struct mydataのメンバーが適切に位置合せされるように、メモリーに埋込みが行われる様子を示しています。 charのメンバーCは、4バイトの[C] [p] [p] [p] ([p]は埋込みバイト)として表現されます。 longのメンバーLは、[L0] [L1] [L2] [L3]として表現されます。 shortのメンバーBは、[B0] [B1] [p] [p]として表現されます。 longのメンバーJは、[J0] [J1] [J2] [J3]として表現されます。


このプラットフォーム上のintの位置合せは4バイトであるため、char Cの後に3バイトが追加され、short Bの末尾に2バイトが追加されます。 埋込みを行うことで、この構造体のデータのアドレスを4等分にできます。 これを、構造体メンバーの位置合せと呼びます。 結果として構造体のサイズは当然、大きくなります。