避免在C ++中使用struct padding

时间:2012-11-01 14:20:50

标签: c++ memory-management data-structures struct

在我的代码中,我有以下struct

struct foo {
 int a;
 int b;
};

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

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

2 个答案:

答案 0 :(得分:7)

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

这取决于编译器。您需要的是使用struct pack ing。

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

有关详细信息,请参阅C++ struct alignment question

希望有所帮助,对不起,我现在无法真正测试它,但这就是你需要的东西

答案 1 :(得分:2)

如果不使用特殊的#pragma来控制结构填充/对齐,您可以将ab分开并将它们存储在单独的 {{1 s,并通过索引“匹配”它们。

对于vector s,即使你可以轻松地将结构拆分为其组成部分(你可能无法从纯逻辑的角度来看 - set没有索引),你仍然需要为动态内存管理调整付费,这可能会抹去你可能获得的任何优势。