2016-06-11 125 views
0

如何處理MATLAB中的內存不足問題?我在驅動器C(安裝了Windows 8)和E(安裝了MATLAB 2015a)中將虛擬內存更改爲20GB。我已重新啓動計算機並運行代碼,但我面臨同樣的問題。更改虛擬內存後,出現內存不足錯誤

+1

你是積極的代碼不運行在一個無限循環或遞歸什麼的,沿途分配更多的內存? –

+0

我正在處理30M的信號採樣。我得到的錯誤是將它與另一個30M採樣信號相乘。我不認爲這是問題。 –

+0

獲得OUT OF MEMORY錯誤後,我在命令'memory'中得到了這個: >> memory 最大可能數組:57 MB(6.016e + 07字節)* 所有陣列都可用的內存:664 MB(6.960e +08字節)** MATLAB使用的內存:2793 MB(2.929e + 09字節) 物理內存(RAM):1910 MB(2.003e + 09字節) *受限於可用的連續虛擬地址空間。 **受限於可用的虛擬地址空間。 –

回答

1

更多Java堆內存是您需要的,它不是關於可用的虛擬內存。

從您的評論似乎你只有約664 MB的內存可用於您的陣列。假設你的信號是一維的,那麼這兩個30M樣本應該採取:

30M * 2 * 8-Bytes = 480 MBytes

如果你有它的一些副本,那麼你的記憶將被填充。使用whos命令檢查每個變量大小。完成後清除每個變量。即使你沒有用完內存,也要清除這些變量,以便爲java更快地進行內存管理。

+0

什麼需要存儲8字節? –

+1

@ S.G.K,每個雙精度數需要8字節。您可以使用'whos'命令或通過網絡搜索來查看此內容,https://en.wikipedia.org/wiki/Double-precision_floating-point_format – eulerleibniz

0

要清楚,length(yourVector)= 30e6?記住你可能太過分了。用fopen/fread加載文件可能會有幫助。它是什麼類型的文件?

dataType = 'float' ; % data type 
chunkSize = 1e4 ; % load in chunks 
fid = fopen(pathToYouFile); frewind(fid); % Read file from the start 
fprintf('Loading . . . '); % start notice 
while ~feof(fid)  
    theData = fread(fid,[1 chunkSize],dataType); % load chunk 
    % do yo thing 
end 
fprintf('Fini. '); % all done 

fclose(fid);