我正在浏览一个不再与该公司合作的超级明星开发的遗留代码.通过他的代码,他已经打包了结构.但是我看到他为结构成员做了这个,只有1个元素.我不确定他这样做是否有任何好处.我错过了什么吗?
示例代码:
struct A {
uint32_t a __attribute__((packed));
};
Run Code Online (Sandbox Code Playgroud)
它取决于目标体系结构,它主要影响数组.对于32位架构,您的示例实际上没有任何效果.另一方面,对于64位体系结构,如果没有packed属性,编译器可能会将 struct A的数组中的条目与64位对齐,从而在每个条目之间留下32位的间隔.
除非你面临严重的记忆限制,否则这可能是一个坏主意.
埃里克雷蒙德的"失去的C结构包装艺术"是关于这一主题的非常有价值的读物.