如何将结构打包到结构中

问题描述 投票:0回答:2

让我更清楚, 我想填充内部结构我该怎么做..?示例-

哪里

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;

}

请有人帮我解决这个问题。

c linux-device-driver padding
2个回答
2
投票

从标签中,我推断您使用的是 Linux。 GCC 识别以下属性:

__attribute__((packed))

您可以在结构声明之前或之后编写以删除填充。


0
投票

事实上,它没有在 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 结构包装的失落艺术

© www.soinside.com 2019 - 2024. All rights reserved.