在我的代码中,我有以下struct
:
struct foo {
int a;
int b;
};
在b
中,仅存储0到100之间的值。所以一般来说,我可以用char
替换它。但是由于填充效应,struct
的大小相同。由于我的代码包含具有数百万个条目的这些结构的vectors
和sets
,如果我能以某种方式规避填充,它将使内存使用量减少三分之一以上。是否有可能这样做,例如一些其他(boost)数据容器的行为方式相同吗?
编辑: 我在Linux系统上同时使用GNU和Intel编译器:
答案 0 :(得分:7)
将我的评论作为答案移动,正如社区建议的那样:)
这取决于编译器。您需要的是使用struct
pack
ing。
对于Visual Studio,您需要#pragma pack
,对于gcc
,您需要使用属性packed
。
有关详细信息,请参阅C++ struct alignment question
希望有所帮助,对不起,我现在无法真正测试它,但这就是你需要的东西
答案 1 :(得分:2)
如果不使用特殊的#pragma
来控制结构填充/对齐,您可以将a
和b
分开并将它们存储在单独的 {{1 s,并通过索引“匹配”它们。
对于vector
s,即使你可以轻松地将结构拆分为其组成部分(你可能无法从纯逻辑的角度来看 - set
没有索引),你仍然需要为动态内存管理调整付费,这可能会抹去你可能获得的任何优势。