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
是四个字节长时),所以在 ch
和 i
之间你得到三个字节填充.在 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
};
我正在阅读 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
是四个字节长时),所以在 ch
和 i
之间你得到三个字节填充.在 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
};