【发布时间】:2019-06-20 23:23:37
【问题描述】:
考虑一个(排序的)无符号整数值向量。
std::vector<unsigned int> data = {1234,1254,1264,1265,1267,1268,1271,1819,1832,1856,
1867,1892,3210,3214,3256,3289};
假设每个 unsigned int 是 4 个字节,这个 16 个元素的向量将占用至少 64 个字节的 RAM。
我认为可以通过按公共基数对这些值进行分组来减少内存使用量。例如,考虑这种类型的数据表示
data =
{
{12..
..34, ..54, ..64, ..65, ..67, ..68, ..71
},
{18..
..19, ..32, ..56, ..67, ..92
}
{32..
..10, ..14, ..56, ..89
}
};
在上面的示例中,我按 100 的块对值进行分组。按 2^8=256 或 2^16=65536 的组对数据进行分组会更合乎逻辑。
是否有一种数据类型(在 std:: 或 boost:: 或其他中)可以为我完成这种技巧,还是我必须为此编写自己的容器类型?这听起来像是一个潜在的好主意吗?
【问题讨论】:
标签: c++ performance vector integer ram