C クラスは、コンパイル中に特定のルールによって決定された方法でメモリを占有します。クラスのサイズは、クラスに含まれるデータ メンバーとそれぞれのアラインメントに基づいて計算されます。
コンパイラーはクラスを分析するときに、各データ メンバーを順番に評価します。
すべてのデータ メンバーを処理した後、コンパイラは、共通のアライメント要件の倍数になるようにクラス サイズを調整します。
この例では、次のようになります。
どちらも同様のデータ メンバー (サイズ 8 の 2 つの char 配列) を持っているため、サイズは 16 バイトになります。
これには TestClass1 および TestClass2 と同じデータ メンバーが含まれていますが、__m128i データ メンバーには 16 バイトのアライメントが必要です。このアライメントは char 配列のアライメントをオーバーライドし、クラス サイズは 48 バイトになります (アライメントに 16 バイト、次に __m128i に 16 バイト、さらにアライメントに 16 バイト)。
このクラスには TestClass3 と同じデータ メンバーがありますが、順序が異なります。ただし、アライメント ルールは同じままで、クラス サイズは 32 バイトになります (最初の char 配列に 8 バイト、アライメントに 16 バイト、__m128i に 16 バイト、次に 2 番目の char 配列に 8 バイト)。
これらのルールにより、効率的なメモリ割り当てと配置が確保され、データ アクセスとパフォーマンスが最適化されます。
以上がC コンパイラはデータ メンバーとアライメントに基づいてクラスのサイズをどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。