MSDNによると、/Zp
コマンドのデフォルトは8です。これは、64ビットのアライメント境界が使用されることを意味します。私は常に、32ビットアプリケーションの場合、MSVCコンパイラは32ビット境界を使用すると想定していました。例えば:
struct Test
{
char foo;
int bar;
};
コンパイラは次のようにパディングします。
struct Test
{
char foo;
char padding[3];
int bar;
};
つまり、/Zp8
はデフォルトで使用されているので、上記の同じ例を使用すると、パディングが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%以上)。