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