LP64 データ型モデルでは long およびポインタフィールドが 64 ビットに拡張されるため、コンパイラが構造体にパディングを追加して、境界を整列することがあります。SPARC プラットフォーム上の 64 ビット環境では、構造体の型はすべて、少なくとも構造体内にある一番大きいサイズに整列されます。構造体を再構成するための簡単な規則は、long とポインタのフィールドを構造体の先頭位置に移動して、残りのフィールドを整列し直すことです。通常はサイズの大きい方から順に整列しますが、どれほどうまく詰め込めるかによって異なります。次に例を示します。
struct bar {
int i;
long j;
int k;
char *p;
}; /* sizeof (struct bar) = 32 */
|
より良い結果を得るには、次のコードを使用します。
struct bar {
char *p;
long j;
int i;
int k;
}; /* sizeof (struct bar) = 24 */
|