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

时间:2011-07-18 09:05:04

标签: c++ packing

例如,我有class

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

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

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

-表示未使用。

为什么C ++不会让它更紧凑,比如

ac--dddd
bbbbbbbb

1 个答案:

答案 0 :(得分:56)

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

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

您可以通过自行重新排序成员来减少填充,增加或减少大小顺序。或者您的编译器可能具有#pragma pack选项或类似的选项,这将寻求以可能的性能和代码大小为代价来最小化填充。阅读编译器的文档。