1

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

标题看起来像:

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

假设这个结构的所有成员都被打包并且一个指针是 64 位的,那么这个结构的长度是 12 字节并且每个成员的对齐是正确的(因为结构的末尾是 8 字节对齐的)。

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

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

我怎么能用 gcc 做到这一点?

使用__attribute__((packed)). 然而,虽然这对 1. 有用,但我的理解是它不包括 2.(即它会导致编译器插入代码来处理未对齐的访问,这在此处不需要)。

4

0 回答 0