MATLAB“内存不足”错误

时间:2009-08-14 11:08:40

标签: matlab

当我在MATLAB中运行示例脚本时,它说:

  

内存不足。键入HELP MEMORY以获取选项。

当我输入“记忆”时,它会报告:

Maximum possible array:             156 MB (1.638e+008 bytes) *
Memory available for all arrays:    740 MB (7.756e+008 bytes) **
Memory used by MATLAB:             1054 MB (1.105e+009 bytes)
Physical Memory (RAM):             3070 MB (3.219e+009 bytes)

*  Limited by contiguous virtual address space available.
** Limited by virtual address space available.

有没有办法解决这个错误?我正在使用Windows XP x32和MATLAB 2009a。

6 个答案:

答案 0 :(得分:12)

pack执行内存碎片整理。它可能会对可用的连续内存有所帮助。

答案 1 :(得分:9)

请记住,当MATLAB说内存不足时,这意味着它不在连续的内存中,因此重启或重启MATLAB可能会有效。

但是,我建议您优化代码并确定如何消耗这么多内存。它可能是设计不合理的递归循环,也可能是错误的索引函数(使用双精度而不是逻辑来索引巨大的矩阵)。

由于我处理大量数据集,我实际上已经存在了一段时间的内存错误,但总会有一个解决方法,提出具体问题并且你将成为surprised

答案 2 :(得分:6)

问题已解决。

在Windows XP x32下,我通过编辑boot.ini来添加交换机/ 3GB / USERVA = 3030

,几乎将MATLAB可用内存量增加了一倍
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3GB /USERVA=3030

与减少数组大小一起,这完全解决了问题:)

我也可以通过升级到Windows x64或Windows 7 x64来解决问题。即使你坚持使用MATLAB x32并且不升级到MATLAB x64,这个行为也会使MATLAB可用的内存量翻倍。 Windows x64的内存效率更高,即使系统只安装了4 GB的物理RAM。

答案 3 :(得分:2)

当内存不足(OOM)时,您尝试分配什么?你有重现的代码吗?各种各样的问题都可能导致内存不足错误。

要进行诊断,请使用“dbstop if all error”来设置错误的断点。内存不足将触发此操作,您可以使用dbup,dbdown和whos()来查看消耗内存的内容。通常,OOM是由不良的数组大小或索引计算引起的,而不仅仅是大数据结构。例如。这将在几乎任何32位MATLAB中触发OOM。

>> x = 1;
>> x(2^30) = 2
??? Out of memory. Type HELP MEMORY for your options.

答案 4 :(得分:1)

试试这个,它适合我。

  • 转到首页 - >偏好图标 - >一般 - > Java堆内存 - >分配您想要的内存大小
  • 在“首选项”窗口中,转到“工作区”(超出Java堆内存级别) - >请参阅“Matlab数组大小限制” 确保取消选中“将最大阵列大小限制为RAM的百分比”。因为你想扩展内存 所以我们不需要这个功能。
  • 完成。

答案 5 :(得分:1)

使用mex在MATLAB中运行(旧)C文件时,我遇到了类似的错误。

我在this issue on GitLab找到了解决方案。

首先,取消选中“首选项”->“工作区”下的“将最大数组大小限制为RAM的百分比”选项,如this earlier answer所示。

应用后,使用以下命令在命令窗口中运行C文件

mex filename.c -compatibleArrayDims