我知道结构填充的工作原理以及填充虚拟字节数据的必要性。填充通过减少获得相同数据的周期数来增加h / w性能。 另一方面,打包允许我们将数据彼此相邻,因此CPU将(可能)必须使用多个周期来完全获取整个数据。 那么包装的必要性虽然会降低性能。 请提出一些必要包装的情况。 我假设h / w中的单词长度为4bytes。
感谢和安培;问候 阿米特库马尔
答案 0 :(得分:2)
通常在空间/内存和CPU时间之间进行权衡。我经常在嵌入式代码中使用struct packing来减小大小,并且很清楚它需要花费一些额外的掩码指令才能使用。
它可能对数据序列化/反序列化有用,您可以更明确地看到数据结构(声明性地?),如果它是根据压缩结构定义的。
然而,这通常是一个值得商榷的立场,因为memcpy
直接在缓冲区和数据结构之间被许多人认为是不好的做法。
答案 1 :(得分:1)
我假设“打包”是指使用非标准的pragma或属性(例如Gcc的__attribute__((packed))
)删除填充。您可能有两个主要原因:
一般来说,这种做法不便携,你应该避免使用它,除非你有充分的理由。
在许多情况下,可以通过重新组织数据结构来减少填充所需的填充:将最大的成员放在第一位,然后按照大小的递减顺序放置以下成员。