matlab内存管理
轉自:http://my.donews.com/deng/2006/09/24/vijgqxehmkxiruywdauvxyiafogtskeymhyw/
?
用 Matlab 進行大規模科學計算或仿真時,內存是一個需要時常注意的問題。當你寫的 Matlab 程序跳出“Out of Memory” 時,以下幾點措施是需要優先考慮的解決方法:
?
?
1. 確保內存的連續性?
?
Matlab 中數組必須占用連續分配的內存段,當無法為新建的數組分配連續的內存段的時候,”Out of Memory” 就會出現。由于反復分配和釋放數組會使可用的連續內存段減少,因此當 Matlab 剛剛啟動時其連續內存最多,此時往往可以新建非常大的數組,這一點可以用命令 feature(‘memstats’)(在 7.0 版本以上)看出。如果現實的最大連續內存段很小,但實際可用內存(非連續的)仍舊很多,則表明內存中碎片太多了。此時可以考慮用 pack 命令,pack 命令的作用就是將所有內存中的數組寫入硬盤,然后重新建立這些數組,以減少內存碎片。此外,在命令行或者程序中都可以使用 clear 命令,隨時減少不必要的內存。?
?
2. 3GB 開關?
?
由于32位 Windows 操作系統的限制,每個進程只能使用最多 2GB 的虛擬內存地址空間,因此 Matlab 的可分配內存也受到相應的限制。Matlab 7.0.1 引進了新的內存管理機制,可以利用 Windows 的 3GB 開關,使用 3GB 開關啟動的 Windows 每個進程可以在多分配 1 GB 的虛擬地址空間,具體的操作方法可見:http://www.mathworks.com/support/tech-notes/1100/1106.html?
?
3. 減少使用雙浮點數?
?
Matlab 默認的數字類型是雙精度浮點數 (double),每個雙浮點數占用 8 個字節。對于一些整數操作來說,使用雙浮點數顯得很浪費。在 Matlab 中可以在預先分配數組時指定使用的數字類型如以下命令:zero(10, 10, ‘uint8′) 。對于浮點數,在很多精度要求不高的情況下,可以使用4個字節的單浮點數 (single),可以減少一半的內存。關于單、雙浮點數的精度對照如下,以便根據需要選擇使用:?
?
?
single: 精度 (1.1921e-007) 最大數 (3.4028e+038)
double: 精度 (2.2204e-016) 最大數 (1.7977e+308)
總結
以上是生活随笔為你收集整理的matlab内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理和图像识别中常用的matlab函
- 下一篇: matlab内存管理(二)