例如,我有一个class
,
class naive {
public:
char a;
long long b;
char c;
int d;
};
根据我的测试程序,a
to d
一个接一个地建立起来,就像
a-------
bbbbbbbb
c---dddd
-
表示未使用。
为什么 C++ 不让它更紧,比如
ac--dddd
bbbbbbbb
标准要求类和结构成员按照声明的顺序存储在内存中。所以在你的例子中,这是不可能的d
出现在之前b
.
此外,大多数体系结构更喜欢多字节类型在 4 或 8 字节边界上对齐。因此,编译器所能做的就是在类成员之间留下空的填充字节。
您可以通过自己按大小顺序对成员重新排序来最小化填充。或者你的编译器可能有#pragma pack
选项或类似的东西,这将寻求最小化填充,但可能会牺牲性能和代码大小。阅读您的编译器的文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)