データ構造体の 32 ビット long long 要素の整列に関連してもう一つの問題があります。すなわち、i386 アプリケーションは 32 ビット境界で long long 要素を整列するだけですが、amd64 ABI は long long 要素を 64 ビット境界に配置するので、データ構造体に大きな隙間が生じる可能性があります。SPARC は 32 ビットと 64 ビットの両方で long long 項目が 64 ビット境界に整列されており、この点が異なります。
次の表は、設計アーキテクチャに対するデータ型整列を示します。
表 6–2 データ型整列
アーキテクチャ |
long long |
double |
long double |
---|---|---|---|
i386 |
4 |
4 |
4 |
amd64 |
8 |
8 |
16 |
sparcv8 |
8 |
8 |
8 |
sparcv9 |
8 |
8 |
16 |
SPARC システムで LP64 に対し問題がないと思われるコードであっても、整列の違いのために、32 ビットと 64 ビットのプログラミング環境間でデータ構造体をコピーする際に問題が生じる可能性があります。そのようなプログラミング環境には、デバイスドライバ ioctl ルーチン、doors ルーチンや、その他の IPC メカニズムがあります。整列の問題は、これらのインタフェースを慎重にコーディングしたり、#pragma pack または _Pack 指示語を適切に使用することによって回避できます。