1

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

struct b在哪里

struct b{
  u_int32_t aa;
  u_int32_t bb;
};

struct c{
  u_int64_t cc;
};

现在,我的编译器在结构 d 中的结构 b 和 c 之间填充 8 个字节。那么,我该如何摆脱它呢?

希望,现在清楚了。有人可以给我答案吗?

结构化的{

struct b;

struct c; //I want to make this structure a padded one, how to go about it?

struct c;

}

拜托,有人可以帮我解决这个问题。

4

2 回答 2

2

从标签中,我推断你在 linux 上。GCC 识别以下属性:

__attribute__((packed))

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

于 2012-08-03T04:29:42.770 回答
0

事实上,它没有在 b 和 c 之间放置任何填充。

让我们看看为什么,

都是u_int32_t32 位 => 4 字节。现在 的大小struct b将是 8 个字节(4 个因为 aa,4 个因为 bb)。此外, 的大小struct c也是 8 个字节。

因此,当struct d制作时,两者struct bstruct c一个接一个地依次放置。nextstruct c直接放在 previous 之后struct c

但是在 final struct cstruct d. 这是因为,如果struct d要在内存中放置多个,则第二个struct d将从 24 而不是 32 的内存位置开始(这很方便)。

如果您想了解更多信息:C 结构打包的失落艺术

于 2017-06-21T09:36:16.383 回答