パッキング コンパイラ オプションまたはプラグマを使用しない限り、次のようなコードを作成します (8 ビットの char と 16 ビットの short を想定)。
struct foo
{
short a ;
char b ;
short c ;
} ;
私の知る限りでは、c
私たちの製品がサポートするすべてのプラットフォーム (かなりの数) で 1 バイトのアラインメント パッドになります。
b
と の間にアラインメント パディングを配置しなかったプラットフォームを見た記憶はありませんがc
、コンパイラが と の間にパディングを合法的に配置できると想像してみてa
くださいb
。
(動機: 現在ディスクに書き出されている、またはネットワーク フローに関与している構造のバイナリ互換性を確保するために、コードにインフラストラクチャを導入しています。可能な場合は、明示的なパディングを挿入して、他の開発者が追加のストレージはこれらのデータ構造によって隠れて消費されています)。
必要に応じて、そうでなければ整列されないメンバーの直前に、コンパイラが整列パディングを配置しないプラットフォームを知っている人はいますか?