Перед выполнением обработки блока вы можете использовать функцию MEMORY , чтобы увидеть, сколько памяти уже используется и сколько осталось доступным для любых дополнительных переменных, которые может понадобиться при обработке блока. Если вы можете оценить общий объем памяти, который потребуется этапам обработки блока, в зависимости от размера блока, вы можете выяснить, насколько большим может быть размер блока, прежде чем исчерпать доступную память. Это может быть легче сказать, чем сделать, так как я не знаю точно, как вы делаете обработку блока.
Вот простой пример. Я начну с очистки рабочего пространства и создания 2 больших матриц:
>> 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.
Если у вас обычно возникают проблемы с нехваткой памяти, вот несколько вещей, которые вы можете сделать:
- Используйте одинарную точность (или целочисленные типы ) для больших матриц вместо значения по умолчанию double точность.
- Обязательно очистите переменные, которые вам больше не нужны (особенно если они большие).