MATLAB 提供 5 個和記憶體管理直接相關的指令:
整理:MATLAB 記憶體管理指令
指令 說明 clear 從記憶體中清除變數或函數 pack 重新安排記憶體的使用情況,使記憶體分散使用的情況降至最低 memory 顯示記憶體使用情況 quit 離開 MATLAB,將所有變數佔用的記憶體歸還給作業系統 例如,若要顯示記憶體使用情況,可以直接輸入 memory 指令:
在上述範例中,顯示可用的實體記憶體(Physical Memory)是 8169 MB(8 GB 左右),而 MATLAB 可用的最大記憶體容量卻超過 8 GB,多出來的部分,即是作業系統所設定的虛擬記憶體(以磁碟空間來模擬記憶體)。若在執行 MATLAB 程式碼時,發生「Out of memory」的警告訊息,即表示已無足夠空間可容納新變數,可採取的解決方案為:
- 隨時使用 clear 指令清除不再須要的變數。
- 執行 pack 指令,減小記憶體分散使用的現象。
- 增加虛擬記憶體的大小,方法如下:
- Windows XP:可由「控制台/系統/進階/效能、設定/進階、虛擬記憶體、變更」下的圖形介面來進行設定。
- Windows 7:可由「控制台/系統/進階系統設定/效能、設定/進階、虛擬記憶體、變更」下的圖形介面來進行設定。
- 選用適合的資料型態。(例如,如果一矩陣的元素值是整數,而且其值介於 0 ~ 255 之間, 就可用 uint8 來儲存,而不須用 double,詳情請參見本書姊妹作「MATLAB 程式設計:入門 篇」中,「矩陣的處理與運算」章中的「矩陣內部資料型態」小節。)
如果上述方法仍無法解決,那麼只有減少所用資料量的大小。一般人再使用 MATLAB 時,通常都會忽 略了變數所佔用的空間大小,舉例來說,如果要產生一個 2000 × 2000 的亂數矩陣 y,我們可以直接使 用「y = rand(2000);」,因為每一個元素都是佔用 8 bytes 的雙倍精準資料型態,因此變數 y 就吃掉 8 × 2000 × 2000 = 32000000 bytes = 32 MB!因此在你的程式碼中,一旦不使用變數 y,就盡量下達「clear y」來清除此變數。
如果你的程式碼一定要用到這些容量超大的變數,最後一招(也是最簡單的一招),就是跟你老闆多拗一些錢來增加記憶體的容量吧!。
MATLAB程式設計:進階篇