让我更清楚一点, 我想填充一个内部结构我该怎么做..?实施例 -
其中struct b
是
struct b{
u_int32_t aa;
u_int32_t bb;
};
struct c{
u_int64_t cc;
};
现在,我的编译器在struct d中的struct b和c之间进行了8字节的填充。那么,我该如何摆脱它呢?
希望,现在很清楚。有人可以给我一个答案吗?
结构d {
struct b;
struct c; //I want to make this structure a padded one, how to go about it?
struct c;
}
拜托,有人可以帮我这个。
答案 0 :(得分:2)
从标签中,我推断你是在linux上。 GCC识别以下属性:
__attribute__((packed))
您可以在声明结构之前或之后编写以删除填充。
答案 1 :(得分:0)
事实上,没有在b和c之间放置任何填充。
让我们看看为什么,
所有u_int32_t
都是32位=> 4字节。现在struct b
的大小将是8个字节(4个因为aa而4是因为bb)。此外,struct c
的大小也是8个字节。
因此,当struct d
成立时,struct b
和struct c
将依次顺序放置。下一个struct c
会直接放在上一个struct c
之后。
但是在最后的 struct c
和struct d
的关闭之后有一个8字节的填充。这是因为,如果要将多个struct d
放置在内存中,则第二个struct d
将从内存位置24开始而不是32(这很方便)。
如果您想了解更多信息:The Lost Art of C Structure Packing