我知道如何结构的填充工作,也的数据填充虚拟字节的必要性。填充通过减少获取相同数据的周期数来增加h/w性能。另一方面,打包允许我们将数据放在一起,因此CPU(可能)必须使用多个周期才能完整地获取整个数据。 那么包装的必要性是什么,尽管它降低了性能。 请建议一些需要包装的情况。 我假设h/w中的字长为4字节。填充和包装的结构
感谢&问候 阿米特库马尔
我知道如何结构的填充工作,也的数据填充虚拟字节的必要性。填充通过减少获取相同数据的周期数来增加h/w性能。另一方面,打包允许我们将数据放在一起,因此CPU(可能)必须使用多个周期才能完整地获取整个数据。 那么包装的必要性是什么,尽管它降低了性能。 请建议一些需要包装的情况。 我假设h/w中的字长为4字节。填充和包装的结构
感谢&问候 阿米特库马尔
它往往是空间/存储器和CPU时间之间的折衷。我经常在嵌入式代码中使用struct packing来减小大小,并且很清楚它需要额外的掩码指令才能使用。
它也可以用于数据序列化/反序列化有用,你可以看到的数据结构更明确(声明?)如果是在一个拥挤的结构来定义。 然而,这往往是一个值得商榷的位置,因为memcpy
-直接在缓冲区和数据结构之间被很多人认为是不好的做法。
我认为通过“包装”你的意思是移除填充,使用非标准编译或属性(如GCC的__attribute__((packed))
)。有两个主要原因可以做到这一点:
一般来说,这种做法是不可移植的,除非你有很好的理由,否则你应该避免这种做法。
在许多情况下,可以减少通过重新组织数据结构所需的填充:把最大的成员第一,然后将下面的成员减少大小顺序。
尼斯但'packing'通常称为分组对象作为在结构的情况下。我不太明白它的意思。 – sjsam
感谢您的回复。 –