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

Why doesn't C++ make the structure tighter?

本文关键字:结构 C++ 为什么      更新时间:2023-10-16

例如,我有一个class

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

,根据我的测试程序,ad依次构建,如

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

-表示未使用。

为什么c++不让它更紧凑,像

ac--dddd
bbbbbbbb

标准要求类和结构成员按照声明顺序存储在内存中。因此,在您的示例中,d不可能出现在b之前。

而且,大多数体系结构更喜欢多字节类型在4字节或8字节边界上对齐。所以编译器所能做的就是在类成员之间留下空的填充字节。

您可以通过自己重新排序成员来最小化填充,以增加或减少大小的顺序。或者你的编译器可能有一个#pragma pack选项或类似的东西,它会以可能的性能和代码大小为代价来最小化填充。