C 構造体のメモリ アライメント
コンピューティングにおいて、メモリ アライメントとは、データをメモリに格納できるアドレスに課される制限を指します。 。コードのパフォーマンスを最適化し、予期しない動作を回避するには、メモリ アライメントを理解することが重要です。
問題ステートメント:
あなたは、メモリ アライメントが通常は行われない 32 ビット システムで作業しています。 4バイトに設定します。次の構造体について考えてみましょう。
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
この構造体には 3 つの 2 バイト フィールドが含まれていますが、sizeof 演算子を使用すると、予期された 8 バイトではなく 6 バイトが返されます。逆に、次の構造体:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
は、フィールド数の増加とパディングの可能性から予想されるように、12 バイトのサイズを返します。結果のサイズに違いがあるのはなぜですか?
説明:
ほとんどのマシンでは、データ型はそのサイズ以下の境界に合わせて配置されます。この場合、short は 2 バイト、int は 4 バイトです。
最初の構造体:
2 番目の構造体:
以上が3 つの short 整数を含む C 構造体のサイズは 6 バイトですが、整数を追加した同様の構造体のサイズは 12 バイトになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。