gpt4 book ai didi

c++ - 打包结构中的解包结构是否自动打包?

转载 作者:行者123 更新时间:2023-12-03 13:58:45 25 4
gpt4 key购买 nike

打包结构中的解包结构是否由 GCC 自动打包?
换句话说,做 __packed__属性自动传播到嵌套结构?
也就是说:

struct unpackedStruct{
int16_t field1;
int32_t field2;
// etc...
}

struct packedStruct{
int16_t field1;
struct unpackedStruct struct1; // <-- Is this struct packed?
// etc...
} __attribute__((__packed__));

最佳答案

不,内部结构没有包装。在 this Godbolt example ,我们可以看到 struct foo里面没有包装struct bar ,其中有 packed属性; struct bar创建的对象在其 .zero 3 中包含三个字节的填充(可见为 struct foo )成员(member),在struct foo之间成员(member)ci .
Current documentation for GCC 10.2明确表示压缩结构的成员的内部布局未压缩(因为外部结构的属性;当然,它可以由于其自己的定义而被压缩)。
(在 older documentation 中说将 packed 应用到结构上等同于将其应用到其成员上,这意味着将 packed 应用于作为成员的“变量”的效果,在 the documentation for variable attributes 中描述。当packed 应用于结构成员,它导致成员的对齐要求为一个字节。也就是说,它消除了先前成员和该成员之间的填充,因为不需要填充来使其对齐。它不会改变表示成员本身。如果该成员是未压缩的结构,则它在内部仍然是未压缩的结构。)

关于c++ - 打包结构中的解包结构是否自动打包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66388902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com