**:
用 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 的虛擬位址空間,具體的操作方法可見:
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中文論壇 子函式 不只是本地函式 是可以共享主函式的空間的,例如這裡的a,b函式他們的workspace是共享的,如果在a中呼叫b,可以不用把引數當做輸入傳入b即可在b中使用 funciton a function b end end...
MATLAB記憶體變數的管理
1.為陣列賦值 利用連續的記憶體分配。但是陣列型別和維數作為陣列的頭資訊儲存在其他的地方。兩者沒有存放在同一連續的記憶體區域 2.刪除陣列中的元素 先移除陣列元素,後壓縮原來分配給陣列的記憶體空間。3.維陣列增加元素 觀察陣列所在的連續區域中是否可以增加新元素。如果可以容納新增加的陣列元素則僅需要擴...
matlab占用太多記憶體 Matlab高效程式設計技巧
用過matlab的同學應該都知道,matlab的慢是出了名的,但是再慢也有優化的方式,下面我們給出幾個matlab程式設計中常用的優化技巧。在講優化方法之前,首先要說的就是matlab中用tic toc的方式來計算執行時間,這是個常識。當然,想統計具體的耗時,可以用profile工具。向量化操作 這...