__attribute __((packed))在只有1个元素的结构上

Sid*_*Sid 0 c++

我正在浏览一个不再与该公司合作的超级明星开发的遗留代码.通过他的代码,他已经打包了结构.但是我看到他为结构成员做了这个,只有1个元素.我不确定他这样做是否有任何好处.我错过了什么吗?

示例代码:

struct A { 
    uint32_t a __attribute__((packed));
};
Run Code Online (Sandbox Code Playgroud)

Rob*_*b K 5

它取决于目标体系结构,它主要影响数组.对于32位架构,您的示例实际上没有任何效果.另一方面,对于64位体系结构,如果没有packed属性,编译器可能会将 struct A的数组中的条目与64位对齐,从而在每个条目之间留下32位的间隔.

除非你面临严重的记忆限制,否则这可能是一个坏主意.

埃里克雷蒙德的"失去的C结构包装艺术"是关于这一主题的非常有价值的读物.