是的,它会影响它。在第一个给出的示例中,所有字段都可以放入单个 64-bit uint64-t
,因此该结构可能总共需要 8 个字节。但是,第二个可能总共有 16 个字节。前三个字段至少需要两个字节(两个uint8_t
)。然后 55 位的最后一个位字段将采用一个uint64_t
可能在 8 字节边界上对齐的单个位字段。因此,虽然实际布局取决于编译器,但在两个示例中位的位置会有所不同(因为uint64_t
在第二个示例中假设的填充之前。
布局可能类似于以下内容(不完全按比例):
bf_struct1
+---------------+---------+---------+-----------------------------------+
| uint8_t | uint8_t | Padding | uint64_t |
+---------------+---------+---------+-----------------------------------+
| bf1, bf2, bf3 | 48-bits | bf4 |
+---------------+---------+---------+-----------------------------------+
bf_struct2
+-----------------------------------+
| uint64_t |
+-----------------------------------+
| bf1, bf2, bf3, bf4 |
+-----------------------------------+