是的,它可以影響它。在第一個例子中,所有的字段都可以放入一個64位的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 |
+-----------------------------------+
sizeof()告訴你這兩個結構是什麼?如果他們都是8,我會回答「不」。 –