7

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

struct foo {
 int a;
 int b;
};

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

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

4

2 回答 2

7

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

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

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

有关详细信息,请参阅C++ 结构对齐问题

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

于 2012-11-01T14:38:43.693 回答
3

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

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

于 2012-11-01T14:32:59.820 回答