【问题标题】:std::vector to hold much more than 2^32 elementsstd::vector 容纳超过 2^32 个元素
【发布时间】:2013-03-19 18:03:09
【问题描述】:

std::vector::size 返回一个size_t,所以我猜它最多可以容纳 2^32 个元素。

是否有一个标准容器可以容纳 更多 更多元素,例如2^64 OR 一种将 std::vector 调整为“索引”的方法,例如unsigned long long?

【问题讨论】:

  • size_t 没有定义的 32 位大小。
  • 唯一重要的容器是std::vector<bool>std::size_t 否则总是足够大(这就是它的定义方式)。
  • 靠猜测编程是行不通的。
  • 以下是标准对size_t 的规定:size_t 类型是实现定义的无符号整数类型,其大小足以包含任何对象的字节大小。
  • 我很想知道您打算使用哪种硬件来存储 2^64 个元素。

标签: c++ vector containers


【解决方案1】:

当然。编译一个 64 位程序。 size_t 将是 64 位宽。

但实际上,您应该做的是退后一步,考虑一下为什么需要这么大的向量。因为你很可能不会,而且有更好的方法来解决你正在处理的任何问题。

【讨论】:

    【解决方案2】:

    size_t 没有预定义的大小,但在 32 位计算机上通常上限为 232

    由于std::vector 必须为所有元素保存连续的内存,您将在超出大小之前耗尽内存。

    为 64 位计算机编译您的程序,您将拥有更多空间。

    更好的是,重新考虑std::vector 是否合适。 为什么要将数万亿个相邻对象直接保存在内存中?

    如果您只需要大型索引而不是真正尝试存储数万亿个对象,请考虑使用 std::map<unsigned long long, YourData>

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      相关资源
      最近更新 更多