例如,我有class,
class
class naive { public: char a; long long b; char c; int d; };
根据我的测试程序,a到d是一个接一个地构建的,如
a
d
a------- bbbbbbbb c---dddd
-表示未使用。为什么C++不把它弄得更紧,像
-
ac--dddd bbbbbbbb
jmo0nnb31#
标准要求类和结构体成员按照声明的顺序存储在内存中,所以在你的例子中,d不可能出现在b之前。而且,大多数体系结构更喜欢多字节类型在4字节或8字节边界上对齐,所以编译器所能做的就是在类成员之间留下空的填充字节。你可以通过自己重新排序成员,以增加或减少大小的顺序来最小化填充。或者你的编译器可能有一个#pragma pack选项或类似的东西,它会以性能和代码大小为代价来寻求最小化填充。阅读你的编译器的文档。
b
#pragma pack
1条答案
按热度按时间jmo0nnb31#
标准要求类和结构体成员按照声明的顺序存储在内存中,所以在你的例子中,
d
不可能出现在b
之前。而且,大多数体系结构更喜欢多字节类型在4字节或8字节边界上对齐,所以编译器所能做的就是在类成员之间留下空的填充字节。
你可以通过自己重新排序成员,以增加或减少大小的顺序来最小化填充。或者你的编译器可能有一个
#pragma pack
选项或类似的东西,它会以性能和代码大小为代价来寻求最小化填充。阅读你的编译器的文档。