【问题标题】:C++: Group integers by common radix to save memoryC ++:按公共基数对整数进行分组以节省内存
【发布时间】: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


    【解决方案1】:

    对于非常受限的场景中的特定输入,这是一个可行的想法。唉 std:: 不提供该结构。您的特定建议可以合理地以类似树的方式实施。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2020-02-24
      • 1970-01-01
      • 2017-11-20
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多