class CHaraICICCC
{
int i;
char c1;
int j;
char c2;
char c3;
char c4;
};
class CHaraIICCCC
{
int i;
int j;
char c1;
char c2;
char c3;
char c4;
};
void fun()
{
CHaraICICCC eici;
CHaraIICCCC eiicc;
int icic = sizeof(eici); // -> output of icic is 16.
int iicc = sizeof(eiicc); // -> output of icic is 12.
}
誰かが知っている場合は、私にこのような理由を教えてください。 ありがとう 原メンバーの順序に基づいてクラスオブジェクトのサイズが異なるのはなぜですか?
こんにちは、Simone、あなたの迅速な返答のおかげで。バイト4とバイト8の間のバイトは、私たちのために損失ですか? (ビジュアルスタジオの一般的な設定で)、最初のメンバはintなので、これらの3バイトは追加されていますか?その損失を避けることはできませんか? – Haranadh
最初のレイアウトを使用し、3バイトの損失を避けるには、コンパイラに1バイトのパディングを使用するように指示する必要があります。私は[これ](http://msdn.microsoft.com/en-us/library/83ythb65.aspx)があなたに当てはまると思います(あなたは 'align(8)'を宣言しなければなりません)。 – Simone
@ Haranadh Gupta:アーキテクチャによっては、ワード整列を使用してパフォーマンスを向上させます。データ構造をパックすることを選択した場合、バイトを「保存」すると、結果のコードが大きくなり、遅くなることがあります。パッキングとアライメントを調整する必要がある理由はありますが、スペースを節約することはめったにありません。 – Clifford