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