【发布时间】:2012-11-01 14:20:50
【问题描述】:
在我的代码中,我有以下struct:
struct foo {
int a;
int b;
};
在b 中,仅存储 0 到 100 之间的值。所以总的来说,我可以用char 替换它。但由于填充效应,struct 的大小相同。由于我的代码包含这些结构中的vectors 和sets 以及数百万个条目,因此如果我能以某种方式规避填充,它将使内存使用量减少三分之一以上。有没有可能这样做,例如其他一些行为相同的(增强)数据容器?
编辑: 我在 Linux 系统上同时使用 GNU 和 Intel 编译器:
【问题讨论】:
-
你需要一个
structpack-ing。取决于您的编译器,您可以使用(可能是pragma pack)来告诉您的编译器,而不是添加填充。 -
@Kiril 你为什么不添加这个作为答案?
-
也许你可以把你的结构一分为二。
-
您真的需要打包吗?大多数处理器在本机大小(整数)上比较小的大小更有效。此外,处理较小的尺寸可能需要额外的处理时间;检查你的汇编代码。 打包是否会为您节省大量内存空间?
-
@ThomasMatthews:我做了一些基准测试:我的代码中处理这些数据的部分在打包数据时会慢 10% 左右。但是这部分只占整个运行时间的 1%,所以额外的减速并不重要。但是,数据占代码内存使用量的 30% 以上。
标签: c++ memory-management data-structures struct