结构的大小与结构的最后一个元素的偏移量



我有一个由几个元素组成的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个偏移量之后立即包含它是有意义的。

没有填充,至少在结构之前或之后没有。但是,如果在同一结构中使用不同的数据类型,有时会添加对齐以提高性能。这是一个编译器设置,如果你想禁用它。

相关内容

  • 没有找到相关文章

最新更新