はい、影響する可能性があります。最初の例では、すべてのフィールドが 1 つの 64 ビットに収まるuint64-t
ため、構造体は合計 8 バイトになる可能性があります。ただし、2 番目の場合、合計で 16 バイトになる可能性があります。最初の 3 つのフィールドには、少なくとも 2 バイト (2 uint8_t
) が必要です。次に、55 ビットの最後のビット フィールドはuint64_t
、8 バイト境界に配置される可能性が高いシングルを取得します。したがって、実際のレイアウトはコンパイラに依存しますが、ビットの位置は両方の例で異なります ( uint64_t
2 番目の例では、前にパディングが想定されているためです。
レイアウトは次のようになります (正確な縮尺ではありません)。
bf_struct1
+---------------+---------+---------+-----------------------------------+
| uint8_t | uint8_t | Padding | uint64_t |
+---------------+---------+---------+-----------------------------------+
| bf1, bf2, bf3 | 48-bits | bf4 |
+---------------+---------+---------+-----------------------------------+
bf_struct2
+-----------------------------------+
| uint64_t |
+-----------------------------------+
| bf1, bf2, bf3, bf4 |
+-----------------------------------+