【问题标题】:Huge vector "hangs" program? (50000 x 50000 cells)巨大的向量“挂起”程序? (50000 x 50000 个单元格)
【发布时间】:2012-05-13 12:20:36
【问题描述】:

我想要一个数组,grid[50000][50000],我尝试使用向量,但是当我运行代码时,它停止了。没有错误。等等。有什么建议吗?

#include <iostream>
#include <vector>

using namespace std;

typedef std::vector<int> IntVec;
typedef std::vector<IntVec> IntGrid;
IntGrid grid(50000, IntVec(50000));

int main(){
  grid[0][0]=3;
  cout<<grid[0][0]<<endl;
}

【问题讨论】:

  • "我想要一个数组,grid[50000][50000]," - 为什么?这是基于您提议的实施的实际要求还是感知要求?占用太多内存,可能有更好的方法,但您需要告诉我们您要解决的问题。
  • @EdS。你能看这里吗:stackoverflow.com/questions/10437622/… 我想使用该代码进行至少 50k 输入。 cac[50k][50k].
  • @vk7x:想要的东西不会让它们发生。您应该查找稀疏矩阵等。
  • 来自链接问题的建议倾向于将您指向std::map&lt;int, std::vector&lt;int&gt;&gt; 或任何其他形式的稀疏存储方案。一次拥有这么多内存几乎是不可能的(除非您拥有一台高端机器并且您对操作系统的资源管理持乐观态度)。
  • @vk7x:我不太了解自动换行算法,所以在这里我无能为力。您是否介意再问一个问题,准确描述您想要做什么(即自动换行,如果可能的话,使用外行对您打算使用的算法的描述)以及您的输入大小要求?您可能会得到比这里的答案更有用的答案,因为您将询问您的实际问题,其中可能有许多您没有考虑过的解决方案。

标签: c++ vector multidimensional-array size


【解决方案1】:

作为一个非常粗略的计算,

50,000 行 × 50,000 列 × 4 字节/整数 = 10,000,000,000 bytes

除非您的计算机具有超过 10 GB 的 RAM,否则您的内存已用完。

您能否重写您的程序以处理较小的数据块,或者使用文件来存储数组中不需要立即访问的部分?

【讨论】:

  • 你能看看这里吗:stackoverflow.com/questions/10437622/… 我想使用该代码进行至少 50k 输入。 cac[50k][50k].
  • 你为什么不告诉我们你想要完成什么?也许我们可以想出一个更有效的解决方案。
  • @AJG85: 不,std::vector 的空间开销是恒定的,因此对于嵌套的开销是 O (n),即当 n 大到 50000 时,与 O (n ²) 数据量相比是完全可以忽略的。
  • @leftaroundabout 嵌套向量是否不维护自己的开始和结束指针等?我想它只会增加几百 MB,即使是这样,相比之下也相对较小。
  • @AJG85 vector 大概有三个词:指针、大小和容量。在 24 字节/向量的 64 位实现上。 50K * 24 大约是结构向量的 1MB 开销。 malloc 开销可能又是这么多,所以我们有几 MB,而不是数百。
猜你喜欢
  • 2013-02-10
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2014-03-10
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多