Matlab中“Out of memory”问题总是相当令人头疼,比如大矩阵做运算时一不小心就会出现。其原因在于:内存在使用的过程中会不断的分配和释放,导致被分割成很多不连续的区域(操作系统知识)。而Matlab中矩阵的存储是以块(block)的形式存储的,也就是说当Matlab在为即将存储的矩阵划分block时,如果没有相应大小的连续内存用于分配,就会报告“Out of Memory”----即便实际内存没有被完全使用。
=================================================================================
使用”memory“命令查看内存使用情况,举个例子(我的电脑能够存下的矩阵如下):
>> memory Maximum possible array: 4733 MB (4.963e+09 bytes) * Memory available for all arrays: 4733 MB (4.963e+09 bytes) * Memory used by MATLAB: 755 MB (7.916e+08 bytes) Physical Memory (RAM): 8098 MB (8.491e+09 bytes)
(以上是以64位8G的windows10系统为例)
此外,由于反复分配和释放内存会使可用的连续内存段减少,因此当 Matlab 刚刚启动时连续内存最多,此时往往可以新建非常大的数组,这一点可以用命令“feature(\'memstats\')”(matlab version >= 7.0)看出。如果显示的最大连续内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。再举个例子:
>> feature(\'memstats\') Physical Memory (RAM): In Use: 3969 MB ( f8188000) Free: 4128 MB ( 102063000) Total: 8097 MB ( 1fa1eb000) Page File (Swap space): In Use: 4655 MB ( 122f4a000) Free: 4722 MB ( 1272a1000) Total: 9377 MB ( 24a1eb000) Virtual Memory (Address Space): In Use: 37110 MB ( 90f64f000) Free: 134180617 MB (7ff6f0991000) Total: 134217727 MB (7ffffffe0000) Largest Contiguous Free Blocks: 1. [at 9c4330000] 134136763 MB (7fec3bb90000) 2. [at 7ff820d71000] 32047 MB ( 7d2fdf000) 3. [at 7ff5ffff3000] 8200 MB ( 20082d000) 4. [at fbf30000] 448 MB ( 1c000000) 5. [at 164030000] 447 MB ( 1bfd0000) 6. [at 9a8330000] 384 MB ( 18000000) 7. [at 14e710000] 281 MB ( 11920000) 8. [at 45c0000] 192 MB ( c000000) 9. [at a7ff0000] 192 MB ( c000000) 10. [at 140028000] 141 MB ( 8d98000) ======= ========== 134179098 MB (7ff691a24000) ans = 1.4065e+14
参考:http://blog.csdn.net/holybin/article/details/22965153
请发表评论