首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__attribute__((packed))会影响程序的性能吗?

__attribute__((packed))会影响程序的性能吗?
EN

Stack Overflow用户
提问于 2010-08-11 09:25:52
回答 5查看 7.6K关注 0票数 13

我有一个名为log的结构,其中有13个字符。在做了sizeof(log)之后,我发现它的大小不是13而是16,我可以使用__attribute__((packed))把它变成13的实际大小,但是我想知道这会不会影响程序的性能。这是一种经常使用的结构。

我希望能够读取结构的大小(13而不是16)。我可以使用宏,但如果这个结构被改变,即添加或删除字段,我希望更新新的大小而不改变宏,因为我认为这是容易出错的。有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-11 09:34:21

是的,它会影响程序的性能。添加填充意味着编译器可以使用整数加载指令从内存中读取内容。在没有填充的情况下,编译器必须单独加载内容,并进行位移位以获得整个值。(即使它是x86,并且这是由硬件完成的,它仍然必须完成)。

考虑一下这一点:如果不是出于性能原因,为什么编译器要插入随机的、未使用的空间?

票数 15
EN

Stack Overflow用户

发布于 2010-08-11 13:58:42

不要使用__attribute__((packed))。如果您的数据结构在内存中,则允许它占用由编译器确定的自然大小。如果它用于读写磁盘,则编写序列化和反序列化函数;不要简单地将cpu本机二进制结构存储在磁盘上。"Packed“结构确实没有合法用途(或者非常少;有关可能存在的不同观点,请参阅对此答案的评论)。

票数 6
EN

Stack Overflow用户

发布于 2010-08-11 09:34:53

是的,它会影响性能。在这种情况下,如果使用((packed))属性分配这类结构的数组,则它们中的大多数最终必须是未对齐的(而如果使用默认包装,则它们都可以在16字节边界上对齐)。如果它们是对齐的,那么复制这些结构会更快。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3454673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档