C ++:按公用基数对整数进行分组以节省内存

时间:2019-01-27 23:21:55

标签: c++ performance vector integer ram

考虑一个无符号int值的(排序的)向量。

std::vector<unsigned int> data = {1234,1254,1264,1265,1267,1268,1271,1819,1832,1856,
                                  1867,1892,3210,3214,3256,3289};

假设每个无符号的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 ::或其他类型中)可以为我做这种窍门,还是我必须为此编写自己的容器类型?听起来像是一个潜在的好主意吗?

1 个答案:

答案 0 :(得分:1)

在非常受限的情况下,对于特定输入,这是一个可行的想法。 las std ::不提供该结构。您的特定建议可以像树一样合理地实现。

当心一般的基数感知顺序,因为它们通常使用大列表,因此比常规向量使用更多的内存。