2-5 記憶體管理

MATLAB 提供 5 個和記憶體管理直接相關的指令:

整理:MATLAB 記憶體管理指令
指令說明
clear從記憶體中清除變數或函數
pack重新安排記憶體的使用情況,使記憶體分散使用的情況降至最低
memory顯示記憶體使用情況
quit離開 MATLAB,將所有變數佔用的記憶體歸還給作業系統

例如,若要顯示記憶體使用情況,可以直接輸入 memory 指令:

Example 1: 02-程式碼與記憶體之最佳化/memory01.mmemoryMaximum possible array: 9471 MB (9.931e+09 bytes) * Memory available for all arrays: 9471 MB (9.931e+09 bytes) * Memory used by MATLAB: 1000 MB (1.049e+09 bytes) Physical Memory (RAM): 8030 MB (8.420e+09 bytes) * Limited by System Memory (physical + swap file) available.

在上述範例中,顯示可用的實體記憶體(Physical Memory)是 8169 MB(8 GB 左右),而 MATLAB 可用的最大記憶體容量卻超過 8 GB,多出來的部分,即是作業系統所設定的虛擬記憶體(以磁碟空間來模擬記憶體)。

若在執行 MATLAB 程式碼時,發生「Out of memory」的警告訊息,即表示已無足夠空間可容納新變數,可採取的解決方案為:

  1. 隨時使用 clear 指令清除不再須要的變數。
  2. 執行 pack 指令,減小記憶體分散使用的現象。
  3. 增加虛擬記憶體的大小,方法如下:
    • Windows XP:可由「控制台/系統/進階/效能、設定/進階、虛擬記憶體、變更」下的圖形介面來進行設定。
    • Windows 7:可由「控制台/系統/進階系統設定/效能、設定/進階、虛擬記憶體、變更」下的圖形介面來進行設定。
  4. 選用適合的資料型態。(例如,如果一矩陣的元素值是整數,而且其值介於 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程式設計:進階篇