填料和填料结构

时间:2016-04-25 11:42:38

标签: c performance

我知道结构填充的工作原理以及填充虚拟字节数据的必要性。填充通过减少获得相同数据的周期数来增加h / w性能。 另一方面,打包允许我们将数据彼此相邻,因此CPU将(可能)必须使用多个周期来完全获取整个数据。 那么包装的必要性虽然会降低性能。 请提出一些必要包装的情况。 我假设h / w中的单词长度为4bytes。

感谢和安培;问候 阿米特库马尔

2 个答案:

答案 0 :(得分:2)

通常在空间/内存和CPU时间之间进行权衡。我经常在嵌入式代码中使用struct packing来减小大小,并且很清楚它需要花费一些额外的掩码指令才能使用。

它可能对数据序列化/反序列化有用,您可以更明确地看到数据结构(声明性地?),如果它是根据压缩结构定义的。 然而,这通常是一个值得商榷的立场,因为memcpy直接在缓冲区和数据结构之间被许多人认为是不好的做法。

答案 1 :(得分:1)

我假设“打包”是指使用非标准的pragma或属性(例如Gcc的__attribute__((packed)))删除填充。您可能有两个主要原因:

  1. 减少内存分配。如果要分配大量对象,则由填充引起的额外分配可能很重要。
  2. 使内存中布局反映磁盘上的布局(例如,处理特定文件格式时)或特定协议。这可以允许直接读取和写入结构对象,而不必分别处理每个字段。 (单个字段中的字节顺序可能仍然是一个问题)。
  3. 一般来说,这种做法不便携,你应该避免使用它,除非你有充分的理由。

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