GCC末端对齐结构

时间:2018-07-28 19:11:59

标签: c gcc struct memory-alignment structure-packing

我正在研究内存分配器。每个分配的缓冲区从一个8字节开始 边界,并且每个头之前都有一个用于管理分配的标头(该标头紧靠8字节对齐的缓冲区之前)。

标题看起来像:

struct header {
    uint32_t     hword32;
    void        *hpointer;
};

假定此结构的所有成员都已打包且指针为64位,则此结构的长度为12个字节,每个字节的对齐方式 成员是正确的(因为结构的 end 是8字节对齐的)。

因此,我想告诉编译器两件事:

  1. 不要在结构的两个成员之间添加填充;和
  2. 不用担心,成员的对齐方式,他们 对齐方式。

我该如何使用gcc?

使用__attribute__((packed))很诱人。但是,虽然这 做1.的诀窍,我的理解是它不涵盖2。(即 导致编译器插入代码以处理未对齐的访问,这里不需要。)

0 个答案:

没有答案