内存访问错误 - 矢量调整大小

Posted

技术标签:

【中文标题】内存访问错误 - 矢量调整大小【英文标题】:Memory Access Error- Vector Resize 【发布时间】:2014-09-30 12:09:56 【问题描述】:

我有两列大小为 N1 和 N2。两者的规模都超过了 10 亿。现在我想定义一个向量并将其大小调整为 N1 X N2。

我尝试使用如下的矢量调整大小函数来实现这一点,但出现内存访问错误。有没有其他方法可以实现这一点。

    myvector.resize(N1*N2);

感谢您的建议

【问题讨论】:

假设向量为int(4 字节),10 亿乘 10 亿,快速近似为 4000 PB 或 4000000000 GB。这是一个很大的向量。 @Borgleader 只有业余爱好者购买 RAM,真正的程序员只有download more RAM! 【参考方案1】:

您真的必须将所有项目都存储在内存中吗?您应该检查是否可以使用较小的矩阵块(如果有的话)。 对于像所描述的将所有项目存储在内存中这样的大型操作来说,扩展性不是很好。我所做的:获取一个块,对其进行操作并将其写回您的介质中。这样可以避免内存不足的错误。

请查看有关核外算法的这一面,以了解有关此方法背后的想法的更多信息:http://en.wikipedia.org/wiki/Out-of-core_algorithm

【讨论】:

即使采用这种从磁盘拉到内存的方法,反之亦然,它们仍然远远超出了磁盘上的空间量(如果您查看我上面的评论)。如果他们小心翼翼,他们或许能够摆脱稀疏数组线性代数算法。 对,但是给出如何处理此类问题的想法也是了解问题所在的开始。

以上是关于内存访问错误 - 矢量调整大小的主要内容,如果未能解决你的问题,请参考以下文章

调整对象矢量大小时出错

矢量调整大小后下标超出范围

在调整大小时禁用矢量填充值? C++

矢量调整大小 - 检测的便携方式

调整大小后保持对矢量元素的引用有效

调整 PaintCode 应用程序生成的图像大小