根据MSDN,
编译器会像这样填充它:
所以,既然默认使用
这有点荒谬,难道我误解了吗?为什么要使用如此大的填充,看起来很浪费空间。在32位系统上,大多数类型甚至不会使用64位,因此大多数变量都将具有填充(可能超过80%)。
/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%)。
7+4
吗?我现在有点困惑这个问题。 - Mysticial