我已经声明了一个联合体,将4100个字节分配给"sample_union"变量,并将相同的联合声明作为结构的一部分,该结构正在分配4104个字节。
union test_size_union {
struct {
uint8_t type;
union {
uint8_t count;
uint8_t list;
};
uint16_t rc;
uint16_t arr_value[2048];
};
uint64_t first_dword;
}__attribute__((packed)) sample_union ;
将上述联合体放置在结构体内会分配 4104 字节。
struct test_size_struct {
union {
struct {
uint8_t type;
union {
uint8_t count;
uint8_t list;
};
uint16_t rc;
uint16_t arr_value[2048];
};
uint64_t first_dword;
};
}__attribute__((packed)) sample_struct;
好的,这不是一个项目要求,但我想知道为什么编译器对这两个声明的行为不同。
gcc版本:(GCC)4.9.2,x86_64
平台:Linux,x86_64
uint16_t[2048]
,因此在大多数机器上占用4096字节。 - DarkDust