我正在浏览一位不再与该公司合作的超级明星开发的遗留代码。通过他的代码,他已经打包了结构。但是我看到他为结构成员做了这个,只有1个元素。我不确定他这样做是否有任何好处。我错过了什么吗?
示例代码:
struct A {
uint32_t a __attribute__((packed));
};
答案 0 :(得分:5)
这取决于目标体系结构,它主要影响数组。对于32位架构,您的示例实际上没有任何效果。另一方面,对于64位体系结构,如果没有packed属性,编译器可能将struct A的数组中的条目与64位对齐,在每个条目之间留下32位的间隙。
除非你面临严重的记忆限制,否则这可能是一个坏主意。
Eric Raymond的"The Lost Art of C Structure Packing"是关于这个主题的非常有价值的读物。答案 1 :(得分:0)
根据gcc's documentation
__attribute__ ((packed))
指定结构字段应具有尽可能小的对齐。
所以对于只使用一个字段或不使用它的结构,不应该有任何区别。