让我更清楚, 我想填充内部结构我该怎么做..?示例-
哪里
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;
}
请有人帮我解决这个问题。
从标签中,我推断您使用的是 Linux。 GCC 识别以下属性:
__attribute__((packed))
您可以在结构声明之前或之后编写以删除填充。
事实上,它没有在 b 和 c 之间放置任何填充。
让我们看看为什么,
所有
u_int32_t
均为 32 位 => 4 字节。现在 struct b
的大小将为 8 个字节(由于 aa 为 4 个字节,由于 bb 为 4 个字节)。另外,struct c
的大小也是8字节。
所以制作
struct d
时,struct b
和struct c
都是依次放置的。下一个 struct c
直接放置在上一个 struct c
之后。
但是在final
struct c
和struct d
的闭包之后有一个8字节的填充。这是因为,如果要将多个 struct d
放入内存中,第二个 struct d
最终将从内存位置 24 开始,而不是从 32 开始(这很方便)。
如果您想了解更多信息:C 结构包装的失落艺术