ZHCADC4A September 2011 – March 2014
结构体成员会被分配从 0 开始的偏移量。每个成员会被分配满足其对齐要求的最低可用偏移量。成员之间可能需要进行填充,以便满足此对齐约束。
联合体成员全部被分配 0 偏移量。
C++ 类的底层表示是一个结构体。在本文档的其他地方,术语结构体 也适用于类。
结构体或联合体的对齐要求等同于其成员中最严格的对齐要求,包括下一节中所述的位字段容器。通过在最后一个成员之后插入填充,存储器中的结构体或联合体大小将向上舍入为其对齐的倍数。如节 3.3中的规定,在栈上按值传递的结构体和联合体具有特殊的对齐规则。
大小为 64 位或更小的结构体在传递到函数或从函数返回时,可能驻留在寄存器或寄存器对中。
在小端模式下,寄存器中的结构体始终右对齐;也就是说,第一个字节占用寄存器(如果是寄存器对,则为偶数寄存器)的 LSB,结构体的后续字节将填充到寄存器中递增的有效字节中。
在大端模式下,寄存器中结构体的布局遵循以下规则:
图 2-2 描绘了大小为 1 字节至 8 字节结构体的大端寄存器表示。
这种布局的基本原理是,允许使用尽可能最小的存储器引用,在寄存器和内存之间复制结构体;例如,2 字节结构体使用 16 位引用,3 字节结构体使用 32 位引用,5 字节结构体使用 64 位引用,依此类推。结构体在所包含存储器引用的大小范围内左对齐。