根据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
这有点荒谬不是吗?我是不是误会了?为什么要用这么大的padding,好像很浪费空间。32 位系统上的大多数类型甚至不会使用 64 位,因此大多数变量都会有填充(可能超过 80%)。