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
