繁体   English   中英

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

[英]__attribute__((packed)) on a struct with only 1 element

我正在研究由超级巨星开发的一些遗留代码,这些遗留代码不再与该公司合作。 通过他的代码,他都打包了结构。 但是,我看到他也对只有1个元素的结构成员执行此操作。 我不确定以这种方式做事对他是否有任何好处。 我想念什么吗?

样例代码:

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

它取决于目标体系结构,并且主要会影响数组。 对于32位体系结构,您的示例将完全无效。 另一方面,对于64位体系结构,如果没有压缩属性,则编译器可能会将结构A数组中的条目对齐为64位,每个条目之间留有32位的间隙。

除非您面临严重的内存限制,否则这可能不是一个好主意。

埃里克·雷蒙德(Eric Raymond)的“ C结构包装的失落的艺术”在这个主题上非常值得一读。

根据gcc的文档 __attribute__ ((packed))指定结构字段应具有尽可能小的对齐方式。

因此,对于仅使用一个字段或不使用它的结构,应该没有任何区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM