C におけるクラス サイズの決定について
コンパイル時に C クラスのサイズを決定するには、データ アラインメントの原則を理解する必要があります。クラス内の各メンバーには、サイズとアライメントの要件があります。
サイズとアライメントの計算プロセス
コンパイル中に、コンパイラは実行サイズ (S) をゼロに初期化し、アライメント要件 (A) から 1 (バイト) まで。クラス内の各メンバーについて:
すべてのメンバーを処理した後、クラスの最終的なサイズが決定されます。これは、クラス全体のアライメント要件 (A) の倍数になるように調整された S の値です。
アライメントに関する考慮事項
例
提供されたコードは、このプロセスを示しています。
<code class="cpp">#include <xmmintrin.h> class TestClass1 { __m128i vect; }; // Size: 16 bytes class TestClass2 { char buf[8]; char buf2[8]; }; // Size: 16 bytes class TestClass3 { char buf[8]; __m128i vect; char buf2[8]; }; // Size: 48 bytes class TestClass4 { char buf[8]; char buf2[8]; __m128i vect; }; // Size: 32 bytes</code>
TestClass3 は、TestClass1 および TestClass2 と同じメンバーを持っていますが、__m128i のアライメント要件により 16 バイト境界が強制されるため、より大きくなります (48 バイト)。データ メンバーの順序が異なる TestClass4 は、アライメントとサイズ (32 バイト) が異なります。
以上がデータのアライメントは C クラスのサイズにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。