C/C++ 嵌套结构是如何打包的?

C/C++ How Nested Structures Are Packed?

如果我的体系结构中的一个字是 4 个字节,我希望填充以下结构以使其大小至少为一个字(4 个字节)。

// 4 bytes
struct
{
  uint8_t High : 4;
  uint8_t Low : 4;
} Value;

现在,假设我有以下嵌套结构:

// ? bytes
struct
{
  uint8_t Address;
  struct
  {
    uint8_t High : 4;
    uint8_t Low : 4;
  } Value;
} Register;

这个结构将如何打包? Value 会保持一个字(4 个字节)的大小吗?我希望有两种方式来打包这个结构,但我不知道哪一种是正确的,甚至不知道哪一种是正确的。假设R沙子RegisterA是成员AddressV是成员Value。我能想到的两种方式是:

第一个:

    Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8
R =     A     0     0     0     V     0     0     0

第二个:

    Byte1 Byte2 Byte3 Byte4
R =     A     V     0     0

谢谢!

此结构按以下方式打包:

    Byte1 Byte2 Byte3 Byte4
R =     A     V     0     0