CPP 核心指南中的布局浪费 space

Wasted space in layout in CPP Core Guidelines

我正在阅读 CPP 核心指南P.9: Don’t waste time or space

示例,差:

struct X {
    char ch;
    int i;
    string s;
    char ch2;

    X& operator=(const X& a);
    X(const X&);
};

然后是:

... Note that the layout of X guarantees that at least 6 bytes (and most likely more) are wasted.

为什么一定要浪费6个字节?以及如何修复(构造函数声明除外,它们是示例的浪费源)

该结构以默认对齐方式开头。第一个成员 ch 对齐。 i 是一个 int 并且必须是四字节对齐的(当 int 是四个字节长时),所以在 chi 之间你得到三个字节填充.在 ch2 之后的结构末尾也是如此,在那里你得到三个字节的填充。插入这些是为了 X x[2]; 两个元素在内存中正确对齐。

struct X {
    char ch;
    char padding1[3]; // so that int i is int-aligned (four bytes)
    int i;
    string s;
    char ch2;
    char padding2[3]; // end of struct must also be aligned
};