【发布时间】:2019-06-24 17:57:05
【问题描述】:
我正在阅读 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&);
};
然后它说:
... 请注意,X 的布局保证至少浪费了 6 个字节(并且很可能更多)。
为什么保证会浪费6个字节?以及如何修复(除了构造函数声明是示例浪费的来源)
【问题讨论】:
-
字节被浪费了,因为在每个
char成员之后进行填充以将所有内容对齐到 4 个字节。 -
你已经看过了吗?:Wikipedia: Data structure alignment
-
有趣的阅读:结构包装的失落艺术catb.org/esr/structure-packing