0

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

4

1 回答 1

1

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

于 2014-11-03T05:55:34.510 回答