最近在用matlab處理稍大的數據時,老是出現out of memory紅色字眼,惱火死了。因為自己使用的是XP系統,物體內存只有2G。XP系統默認情況下只允許給一個進程分配最大2G的內存,所以即使是增加了系統的虛擬內存,那么在matlab下這些內存也是用不到的。其實最近碰到的倒不是內存不夠,而是有時候需要定義一個比較大的數組,而這些數組在matlab內存使用時又必須占用連續的內存,所以有時候雖然內存總量夠,不過也不能保證就一定能夠分配該數組。在matlab命令行使用了pack命令后也無濟於事(pack命令大概而已理解為是用來把一些瑣碎的內存整合在一起的)。
最近在網上看到有使用3GB開關解決的,試了下還不錯,3GB開關功能就是打破傳統的xp最多只能為一個進程分配2GB內存的限制,也就是說現在可以擴展到一個線程3GB,當然了,這需要xp server2系統才有該功能。並且在使用該功能時必須保證系統的內存大於3GB,像我這電腦內存只有2G,就應該加入虛擬內存。反正加虛擬內存后其總量必須大於3G就ok。
開啟3GB開關的方法如下:
右鍵點擊我的電腦 -> 屬性 -> 高級 -> 啟動和故障恢復 -> 設置 -> 編輯。
進入boot.int,將你的系統名,在該文件的最后添加下面一行代碼:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional with 3GB switche" /3gb
重啟計算機(因為是添加的一行代碼,不是覆蓋最后一行代碼,所以重啟后系統會讓你選擇是正常啟動還是開啟3GB開關啟動,如果我們需要用到matlab類似東西即一個線程需要大的內存的話,就從3GB啟動,否則正常啟動即可,另外增加的那行代碼后面的/3gb也是需要的)。
比如說沒用開啟3GB功能前,在matlab命令行輸入:feature(‘memstats’)其結果如下:
雖然看起來內存很多,那是因為我剛啟動電腦,然后只打開matlab后,一旦運行程序就不夠了。這時候運行我自己設計的程序就容易出現out of memory錯誤
啟動3GB開關后,不會出現了那個內存不夠錯誤了,一切正常,同樣使用命令feature(‘memstats’)來查詢,其結果如下:
可以看到,虛擬內存那一項增加到了3GB。
參考資料:
http://www.mathworks.com/help/matlab/matlab_prog/resolving-out-of-memory-errors.html