ZHCU876Z July 2001 – October 2023 SM320F28335-EP
当编译器确定结构的布局时,它会根据需要分配尽可能多的字来容纳所有成员,同时遵守每个成员的对齐约束。这意味着填充字节可以放置在成员之间和结构的末尾处。每个成员都按其类型要求对齐。
大小为 16 位的类型在 16 位边界上对齐。大小为 32 位或更大的类型在 32 位(2 个字)边界上对齐。有关 EABI 字段对齐的详细信息,请参阅《C28x 嵌入式应用程序二进制接口 (EABI) 参考指南》(SPRAC71)。
然而,如果位字段以前不是位字段,那么位字段可能不会像位字段的声明类型那样严格对齐。位字段按照源代码中显示的顺序打包。首先填充结构字的最低有效位。位字段仅按请求的位数分配。位字段会打包成一个字的相邻位。
对于 COFF,位字段不与以下重叠:
如果某个位字段与下一个边界重叠,则会将整个位字段放入下一个边界中。下表提供了一些示例:
说明 | 示例 | 结构体的内容(以小端字节序顺序) |
---|---|---|
本示例中的位字段 A 和 B 适合 32 位边界。 |
|
|
如果 A 增加到 9 位,则 B 的最高有效位将跨越 32 位边界。因此,B 会放置在下一个 32 位边界。 |
|
|
如果 B 增加到 25 位,则当直接放置在 8 位 A 之后时,它将跨越 32 位边界。因此,B 将放置在下一个 32 位边界。 |
|
|