我有一个由几个元素组成的C结构。当我在结构的最后一个元素上键入offsetof()时,它显示144,而sizeof()最后一个元件是4。所以,我假设这个结构的大小是148。但是,对结构本身运行sizeof()会返回一个值152。我对偏移量有什么误解吗?这个结构的尺寸不是应该是148而不是152吗?是否有某种填充被应用来适应字节?我在Ubuntu 14的64位平台上运行。
Struct A{
// few elements
};
Struct B{
Struct A;
<type> C;
<type> D;
// few more elements
};
元素C的偏移量为148(可能是因为没有应用填充),但结构a的大小为152(很可能是由于填充),因此,当执行memcpy时,分配给元素C的值被清零。
UPDATE:刚刚验证的sizeof()元素C是4个字节,因此,在第148个偏移量之后立即包含它是有意义的。
没有填充,至少在结构之前或之后没有。但是,如果在同一结构中使用不同的数据类型,有时会添加对齐以提高性能。这是一个编译器设置,如果你想禁用它。