Matlab中“Out of memory”问题总是相当令人头疼,比如大矩阵做运算时一不小心就会出现。其原因在于:内存在使用的过程中会不断的分配和释放,导致被分割成很多不连续的区域(操作系统知识)。而Matlab中矩阵的存储是以块(block)的形式存储的,也就是说当Matlab在为即将存储的矩阵划分block时,如果没有相应大小的连续内存用于分配,就会报告“Out of Memory”----即便实际内存没有被完全使用。
============================================================================
遇到这个问题时,首先要学会使用help命令查看内存相关的命令及其用法(matlab最最最权威的指导材料,你值得拥有)。例如使用”memory“命令查看内存使用情况,举个例子:
>>memory
Maximum possible array: 1102 MB (1.155e+009 bytes) * #当前系统数组能占的最大内存
Memory available for all arrays: 1427 MB (1.496e+009 bytes) ** #当前系统变量可被分配的空间
Memory used by MATLAB: 363 MB (3.811e+008 bytes) #matlab已经使用的内存数量
Physical Memory (RAM): 3063 MB (3.212e+009 bytes) #系统物理内存数量
* Limited by contiguous virtual address space available. #打星号表示受限于连续可用的虚拟地址空间(内存空间)
** Limited by virtual address space available. #打双星号表示受限于可用的虚拟地址空间(内存空间)
(以上是以32位windows系统为例)
此外,由于反复分配和释放内存会使可用的连续内存段减少,因此当 Matlab 刚刚启动时连续内存最多,此时往往可以新建非常大的数组,这一点可以用命令“feature('memstats')”(matlab version >= 7.0)看出。如果显示的最大连续内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。再举个例子:
>> feature('memstats')
Physical Memory (RAM):
In Use: 2189 MB (88db8000)
Free: 873 MB (36924000)
Total: 3062 MB (bf6dc000)
Page File (Swap space):
In Use: 3239 MB (ca7be000)
Free: 2884 MB (b4444000)
Total: 6124 MB (17ec02000)
Virtual Memory (Address Space):
In Use: 612 MB (264d2000)