我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:''std::bad_alloc''

Posted

技术标签:

【中文标题】我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:\'\'std::bad_alloc\'\'【英文标题】:I am trying to work with 5 Dimensional arrays with a lot of steps. I get an error: ' 'std::bad_alloc' '我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:''std::bad_alloc'' 【发布时间】:2019-05-24 15:40:21 【问题描述】:

我正在解决一个需要 5 维数组(动态分配)且步数至少为 1000 的问题。代码可以正常运行 50 步。同时,它给出了一个错误,即在抛出“std::bad_alloc”的实例后调用终止 什么():std::bad_alloc 中止(核心转储) ' 当步数增加时。有什么建议吗?

【问题讨论】:

您似乎内存不足,如std::bad_alloc所示。 感谢您的回复。是的。我确实明白了。但是,有什么出路呢? 【参考方案1】:

我正要写另一条评论,但是太长了......

您要求解决 std::bad_alloc,我可以考虑两种选择:

购买更多内存 ;-) 停止分配这么多内存

鉴于此,但您没有提供任何代码,并且不清楚您对“步骤”的含义,我将假设“步骤”是每个一维数组的大小。

现在,考虑一个一维(标准)数组。大小为 50 的 char 数组在内存中需要 50 个连续字节。

对于二维数组,所需内存为 50^50: 2500 字节。

对于 3 维数组,所需内存为 50^3: 125 KB。

对于一个五维数组,您需要 50^5 (312500000) 个字节,大约 300 MB(不一定是连续的,因为您通常使用嵌套的 for loop 分配每个子数组)。

如果数组的长度是 1000 而不是 50,则所需的内存将是 1000^5(右侧有 15 个零的 1)字节,几乎是 PB!

这就是你内存不足的原因。

【讨论】:

以上是关于我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:''std::bad_alloc''的主要内容,如果未能解决你的问题,请参考以下文章

如何为数组的'n'个维循环?

通过反应获取 json 对象数据

在一维数组中写维吉尼广场

使用“MPI_Gatherv”沿第 n 维堆叠数组

如何在一维数组中“展平”或“索引”3维数组?

N维数组变成单个数组? [复制]