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

时间:2014-11-03 05:46:57

标签: linux gcc sizeof offsetof

我有一个由几个元素组成的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的值得到归零。

更新:刚刚验证的sizeof()元素C是4个字节,因此,有意义的是它会在第148个偏移后立即包含。

1 个答案:

答案 0 :(得分:1)

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