我有一个名为log的结构,其中有13个字符。在做了sizeof(log)之后,我发现它的大小不是13而是16,我可以使用__attribute__((packed))把它变成13的实际大小,但是我想知道这会不会影响程序的性能。这是一种经常使用的结构。
我希望能够读取结构的大小(13而不是16)。我可以使用宏,但如果这个结构被改变,即添加或删除字段,我希望更新新的大小而不改变宏,因为我认为这是容易出错的。有什么建议吗?
发布于 2010-08-11 09:34:21
是的,它会影响程序的性能。添加填充意味着编译器可以使用整数加载指令从内存中读取内容。在没有填充的情况下,编译器必须单独加载内容,并进行位移位以获得整个值。(即使它是x86,并且这是由硬件完成的,它仍然必须完成)。
考虑一下这一点:如果不是出于性能原因,为什么编译器要插入随机的、未使用的空间?
发布于 2010-08-11 13:58:42
不要使用__attribute__((packed))。如果您的数据结构在内存中,则允许它占用由编译器确定的自然大小。如果它用于读写磁盘,则编写序列化和反序列化函数;不要简单地将cpu本机二进制结构存储在磁盘上。"Packed“结构确实没有合法用途(或者非常少;有关可能存在的不同观点,请参阅对此答案的评论)。
发布于 2010-08-11 09:34:53
是的,它会影响性能。在这种情况下,如果使用((packed))属性分配这类结构的数组,则它们中的大多数最终必须是未对齐的(而如果使用默认包装,则它们都可以在16字节边界上对齐)。如果它们是对齐的,那么复制这些结构会更快。
https://stackoverflow.com/questions/3454673
复制相似问题