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
沙子Register
,A
是成员Address
,V
是成员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
如果我的体系结构中的一个字是 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
沙子Register
,A
是成员Address
,V
是成员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