[置顶] Matlab的内存问题

Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,”Out of Memory”就会出现。在使用的过程中,由于存储单元的不断的被分配和清除,反复分配和释放数组会使内存被分割成不连续的区域,可用的连续内存段减少,很容易造成“Out of Memory”。


clearpack的使用:

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.
>> 


关于更多Matlab内存如何合理使用的问题,可以参考http://blog.csdn.net/kensun0/article/details/8315984

你可能感兴趣的:(clear,matlab,memory,out,pack,of,内存使用)