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

例如,我有一个类,

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

并根据我的测试程序,a to d是一个接一个建成的,喜欢

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

– 表示未使用。

为什么不让它更紧,像

ac--dddd
bbbbbbbb
类和结构体成员被标准要求以相同的顺序存储在内存中。所以在你的例子中,d不可能出现在b之前。

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

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

http://stackoverflow.com/questions/6730664/why-doesnt-c-make-the-structure-tighter

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么C不使结构更紧凑?