在进行块处理之前,可以使用
MEMORY
函数来查看块处理可能需要创建的其他变量已经使用了多少内存,还有多少可用内存。如果可以估计块处理步骤所需的总内存量(作为块大小的函数),则可以在耗尽可用内存之前计算出块大小的大小。这可能说起来容易做起来难,因为我不知道您是如何进行块处理的。
下面是一个简单的例子。我将首先清除工作区并创建两个大型矩阵:
>> clear all
>> mat1 = zeros(8000); %# An 8000-by-8000 matrix of doubles
>> mat2 = zeros(8000); %# Another 8000-by-8000 matrix of doubles
现在,假设我知道我必须分配一个
N-by-N
双精度矩阵,需要
8*N*N
内存字节数(每倍8字节)。我可以做下面的事情来看看我能做多大
N
:
>> uV = memory %# Get the memory statistics
uV =
MaxPossibleArrayBytes: 314990592
MemAvailableAllArrays: 643969024
MemUsedMATLAB: 1.2628e+009
>> maxN = floor(sqrt(uV.MaxPossibleArrayBytes/8)) %# Compute the maximum N
maxN =
6274
>> mat3 = ones(maxN); %# Works fine
>> mat3 = ones(maxN+1); %# Tanks! Too large!
??? Out of memory. Type HELP MEMORY for your options.
如果您经常遇到内存不足的问题,可以做以下几件事: