在 amd64 上,以下结构的大小为 16 字节:
typedef struct _my_struct {
void *a;
UINT32 b;
UINT16 c;
UINT8 d;
UINT8 e;
} my_struct;
但是当我将前三个变量放在一个 union 中时,大小变为 24。为什么?
typedef struct _my_struct {
union {
struct {
void *a;
UINT32 b;
UINT16 c;
} my_inner;
struct {
void **f;
} my_inner2;
}
UINT8 d;
UINT8 e;
} my_struct;
最佳答案
您正在创建一个新的结构类型 (my_inner
)。编译器向该结构添加填充,使其大小变为 16 字节(对于 amd64)。然后它向外部结构类型 (my_struct
) 添加填充,使其大小增长到 24 字节。
关于c - 为什么union和inner struct要加padding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46000983/