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

时间:2016-12-30 14:58:30

标签: c++

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

示例代码:

struct A { 
    uint32_t a __attribute__((packed));
};

2 个答案:

答案 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))指定结构字段应具有尽可能小的对齐。

所以对于只使用一个字段或不使用它的结构,不应该有任何区别。