2016-04-25 57 views
-1

我知道如何结构的填充工作,也的数据填充虚拟字节的必要性。填充通过减少获取相同数据的周期数来增加h/w性能。另一方面,打包允许我们将数据放在一起,因此CPU(可能)必须使用多个周期才能完整地获取整个数据。 那么包装的必要性是什么,尽管它降低了性能。 请建议一些需要包装的情况。 我假设h/w中的字长为4字节。填充和包装的结构

感谢&问候 阿米特库马尔

回答

2

它往往是空间/存储器和CPU时间之间的折衷。我经常在嵌入式代码中使用struct packing来减小大小,并且很清楚它需要额外的掩码指令才能使用。

它也可以用于数据序列化/反序列化有用,你可以看到的数据结构更明确(声明?)如果是在一个拥挤的结构来定义。 然而,这往往是一个值得商榷的位置,因为memcpy-直接在缓冲区和数据结构之间被很多人认为是不好的做法。

1

我认为通过“包装”你的意思是移除填充,使用非标准编译或属性(如GCC的__attribute__((packed)))。有两个主要原因可以做到这一点:

  1. 减少内存分配。如果您将分配大量对象,则由于填充造成的额外分配可能会很大。
  2. 为了使在存储器布局反映在磁盘上的布局或在一个特定的协议(特别的文件格式例如当处理)。这可能允许直接读写结构对象,而不必分别处理每个字段。 (单个字段内的字节顺序可能仍然是一个问题)。

一般来说,这种做法是不可移植的,除非你有很好的理由,否则你应该避免这种做法。

在许多情况下,可以减少通过重新组织数据结构所需的填充:把最大的成员第一,然后将下面的成员减少大小顺序。

+0

尼斯但'packing'通常称为分组对象作为在结构的情况下。我不太明白它的意思。 – sjsam

+0

感谢您的回复。 –