C 構造体のメモリ アライメント
C 構造体を扱う場合、メモリ アライメントを理解することが重要です。メモリの配置とは、メモリ内の特定の境界にデータを配置することを指します。 32 ビット マシンでは、メモリは通常 4 バイト境界でアライメントされます。
構造体のメモリ アライメント
次の構造体を考えてみましょう:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
それぞれの unsigned short は 2 バイトを占めます。理論上、myStruct のサイズは 2 * 3 = 6 バイトになります。ただし、メモリ アライメントは実際のサイズに影響を与える可能性があります。
この場合、最大のデータ メンバーが unsigned short (2 バイト) であるため、myStruct は 2 バイト境界にアライメントされます。したがって、メンバー間にパディングは必要なく、myStruct のサイズは 6 バイトのままです。
構造体のパディング
次に、この変更された構造体について考えてみましょう。
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
int メンバーを追加すると、構造体のサイズと配置が変更されます。 int は 4 バイトなので、myStruct の位置合わせは 4 バイトに切り上げられます。
適切に位置合わせするために、v3 と i の間に 2 バイトのパディングが挿入されます。これにより、myStruct の合計サイズは 6 2 4 = 12 バイトになります。
結論
メモリ アライメントにより、データがメモリに効率的に配置されます。アライメント要件は、構造内の最大のデータ メンバーのサイズに基づいています。これらの原則を理解することは、メモリ使用量を最適化し、コード効率を維持するために不可欠です。
以上がメモリのアライメントは C 構造体のサイズにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。