Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,”Out of Memory”就会出现。在使用的过程中,由于存储单元的不断的被分配和清除,反复分配和释放数组会使内存被分割成不连续的区域,可用的连续内存段减少,很容易造成“Out of Memory”。
clear和pack的使用:
clear:Remove items from workspace, freeing up system memory
pack:Consolidate workspace memory
用法可从帮助文档查询,不再赘述。
因此当 Matlab 刚刚启动时其连续内存最多,此时往往可以新建非常大的数组。如果现实的最大连续内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。此时可以考虑用 pack命令,pack 命令的作用就是将所有内存中的数组写入硬盘,然后重新建立这些数组,以减少内存碎片。此外,在命令行或者程序中都可以使用clear 命令,随时减少不必要的内存。
实测使用
memory: Display memory information
本人是在笔记本上测试,内存3G。Matlab中用8个字节存储double
A = ones(5000); % 占用内存 5000 * 5000 * 8 B = 190M
当申请C时,可用空间760M,但最大连续空间114M,需要190M,故提示:
Out of memory. Type HELP MEMORY for your options.
>> memory Maximum possible array: 493 MB (5.164e+08 bytes) * Memory available for all arrays: 1142 MB (1.197e+09 bytes) ** Memory used by MATLAB: 577 MB (6.050e+08 bytes) Physical Memory (RAM): 2932 MB (3.075e+09 bytes) * Limited by contiguous virtual address space available. ** Limited by virtual address space available. >> A = ones(5000); >> memory Maximum possible array: 302 MB (3.164e+08 bytes) * Memory available for all arrays: 951 MB (9.971e+08 bytes) ** Memory used by MATLAB: 768 MB (8.050e+08 bytes) Physical Memory (RAM): 2932 MB (3.075e+09 bytes) * Limited by contiguous virtual address space available. ** Limited by virtual address space available. >> B = ones(5000); >> memory Maximum possible array: 114 MB (1.199e+08 bytes) * Memory available for all arrays: 760 MB (7.971e+08 bytes) ** Memory used by MATLAB: 958 MB (1.005e+09 bytes) Physical Memory (RAM): 2932 MB (3.075e+09 bytes) * Limited by contiguous virtual address space available. ** Limited by virtual address space available. >> C = ones(5000); Out of memory. Type HELP MEMORY for your options. >> clear B >> memory Maximum possible array: 302 MB (3.164e+08 bytes) * Memory available for all arrays: 951 MB (9.971e+08 bytes) ** Memory used by MATLAB: 768 MB (8.050e+08 bytes) Physical Memory (RAM): 2932 MB (3.075e+09 bytes) * Limited by contiguous virtual address space available. ** Limited by virtual address space available. >>