30

例如,我有一个class

类天真{
上市:
    字符一个;
    长长 b;
    字符 c;
    诠释d;
};

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

一种 -  -  - -
bbbbbbbb
c---dddd

-表示未使用。

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

ac--dddd
bbbbbbbb
4

1 回答 1

56

标准要求类和结构成员以与声明它们相同的顺序存储在内存中。所以在你的例子中,不可能d出现 before b

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

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

于 2011-07-18T09:08:56.527 回答