MSDNによると、/Zp
コマンドのデフォルトは8で、64ビットの境界線の境界が使用されます。私はいつも32ビットアプリケーションでは、MSVCコンパイラは32ビット境界を使用すると仮定してきました。そのようなMSVCのデフォルトメモリアライメント8
struct Test
{
char foo;
int bar;
};
コンパイラの意志パッド、それは:たとえば/Zp8
がデフォルトで使用されているので
struct Test
{
char foo;
char padding[3];
int bar;
};
そう、それは私のパディングは上記と同じ例を使用して7 + 4バイトになりどういう意味します:
struct Test
{
char foo;
char padding1[7];
int bar;
char padding2[4];
}; // Structure has 16 bytes, ending on an 8-byte boundary
これは少しばかげていませんか?私は誤解していますか?なぜこのような大きな詰め物が使われているのか、それは空間の浪費のようです。 32ビットシステムのほとんどのタイプは64ビットを使用することさえありませんので、変数の大部分はパディング(おそらく80%以上)を持つでしょう。
あなたは '7 + 4'で明確になりますか?私はちょっと今のところ疑問に混乱しています。 – Mysticial
@Mysticial:別の例を使って私のOPを更新しました。混乱させて申し訳ありません。 –
清算していただきありがとうございます。私はちょうどあなたの最初の構造体をテストし、サイズは2番目の構造体スニペットを介して埋め込まれたわずか8バイトです。だから私はあなたが得ているものを再現することができません。 (または少なくともあなたが得るべきだと思うもの) – Mysticial