当我在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。
答案 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)
试试这个,它适合我。
答案 5 :(得分:1)
使用mex在MATLAB中运行(旧)C文件时,我遇到了类似的错误。
我在this issue on GitLab找到了解决方案。
首先,取消选中“首选项”->“工作区”下的“将最大数组大小限制为RAM的百分比”选项,如this earlier answer所示。
应用后,使用以下命令在命令窗口中运行C文件
mex filename.c -compatibleArrayDims