1

在 VC++ 上,为什么编译器只在使用非 char 数据类型时填充结构?

IE

struct TEST
{
   char a[7];
};

struct TEST2
{
   __int32 a;
   char b[7];
};

sizeof(TEST); // Returns 7
sizeof(TEST2); // Returns 12
4

1 回答 1

2

归根结底是sizeof(char) == 1——总是。

数组必须是连续的,因此在 char 数组中(如果它足够大),您最终会得到每个可能对齐的元素。由于编译器/硬件必须使其工作,因此不需要插入填充来处理char类似的事情struct

现在,这并不是说编译器不能插入填充。例如,即使使用 char 数组,它也可以通过这样做来提高性能。例如,根据您的struct定义,编译器完全可以接受 7 个字符的数组再填充一个以使 struct 的大小为 8 - 2 的漂亮、简洁的幂。

在某些硬件上,您可能会看到这一点。碰巧的是,VC++ 支持的英特尔硬件并没有真正从这样的事情中受益,所以你不太可能在那里看到它。

于 2012-06-15T01:36:45.837 回答