c - 为什么union和inner struct要加padding?

标签 c padding unions

在 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/

相关文章:

c - 选择服务器多读问题

c++ - 类 union 类中 `reinterpret_cast` 上的 `this` 是未定义的行为吗?

计算数组的大小

css - 是否有任何我可以遵循的 CSS 填充启发式方法?

c++ - 在 QT 中使用 QWidgets 和 QGroupBox 时不需要的填充

qt - 将填充和边距设置为 0 不起作用

Objective-C KVO 不适用于 C 联合体

c++ - 应该将 float 转换为字节数组的程序中的运行时错误

c - 启动失败。找不到二进制文件。 MinGW

c++ - 优化稀疏矩阵中的对数熵计算