我有一个由几个元素组成的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个偏移后立即包含。
答案 0 :(得分:1)
没有填充物,至少在结构之前或之后没有填充物。但是,如果在同一结构体中使用不同的数据类型,有时会添加alignment以提高性能。这是一个编译器设置,如果你想要你可以禁用它。