2016-06-11 110 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);