我正在研究内存分配器。每个分配的缓冲区都从 8 字节边界开始,每个缓冲区前面都有一个用于管理分配的标头(标头紧挨在 8 字节对齐缓冲区之前)。
标题看起来像:
struct header {
uint32_t hword32;
void *hpointer;
};
假设这个结构的所有成员都被打包并且一个指针是 64 位的,那么这个结构的长度是 12 字节并且每个成员的对齐是正确的(因为结构的末尾是 8 字节对齐的)。
因此,我想告诉我的编译器两件事:
- 不要在结构的两个成员之间添加填充;和
- 不用担心,关于成员的对齐,他们是对齐的。
我怎么能用 gcc 做到这一点?
使用__attribute__((packed))
. 然而,虽然这对 1. 有用,但我的理解是它不包括 2.(即它会导致编译器插入代码来处理未对齐的访问,这在此处不需要)。