例如,我有一个class
,
class naive { public: char a; long long b; char c; int d; };
根据我的测试程序,a
对d
被陆续建成,像
a------- bbbbbbbb c---dddd
-
意味着未使用
为什么C++不能让它变得更紧,比如
ac--dddd bbbbbbbb
Gra*_*and 56
标准要求类和结构成员按照声明它们的顺序存储在内存中.所以在你的例子中,以前不可能d
出现b
.
此外,大多数架构更喜欢多字节类型在4字节或8字节边界上对齐.所以编译器可以做的就是在类成员之间留下空填充字节.
您可以通过自行重新排序成员来减少填充,增加或减少大小顺序.或者您的编译器可能有一个#pragma pack
选项或类似的东西,它将寻求以可能的性能和代码大小为代价来最小化填充.阅读编译器的文档.
归档时间: |
|
查看次数: |
1867 次 |
最近记录: |