为什么C++不能使结构更紧密?

hzbexzde  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(94)

例如,我有class

class naive {
public:
    char a;
    long long b;
    char c;
    int d;
};

根据我的测试程序,ad是一个接一个地构建的,如

a-------
bbbbbbbb
c---dddd

-表示未使用。
为什么C++不把它弄得更紧,像

ac--dddd
bbbbbbbb
jmo0nnb3

jmo0nnb31#

标准要求类和结构体成员按照声明的顺序存储在内存中,所以在你的例子中,d不可能出现在b之前。
而且,大多数体系结构更喜欢多字节类型在4字节或8字节边界上对齐,所以编译器所能做的就是在类成员之间留下空的填充字节。
你可以通过自己重新排序成员,以增加或减少大小的顺序来最小化填充。或者你的编译器可能有一个#pragma pack选项或类似的东西,它会以性能和代码大小为代价来寻求最小化填充。阅读你的编译器的文档。

相关问题