避免在C++中使用struct padding

Tho*_* W. 7 c++ struct memory-management data-structures

在我的代码中,我有以下内容struct:

struct foo {
 int a;
 int b;
};
Run Code Online (Sandbox Code Playgroud)

b,仅存储0到100之间的值.所以一般来说,我可以用一个替换它char.但是struct由于填充效果的大小相同.由于我的代码包含vectors并且sets具有数百万个条目的这些结构,如果我能以某种方式规避填充,它将使内存使用量减少三分之一以上.有没有可能这样做,例如一些其他(boost)数据容器的行为方式相同?

编辑:我在Linux系统上同时使用GNU和Intel编译器:

Kir*_*rov 7

正如社区建议的那样,将我的评论作为答案移动:)

这取决于编译器.你需要的是使用struct packing.

对于Visual Studio,您需要#pragma pack和for gcc,您需要使用属性packed.

有关更多信息,请参阅C++ struct alignment问题

希望有所帮助,抱歉我现在无法真正测试它,但这就是你所需要的