РЕДАКТИРОВАТЬ: MathWorks дать совет по этой проблеме .
Вы можете просмотреть использование памяти с помощью команд system_dependent memstats
и system_dependent dumpmem
(а также просто memory
, как отметил Джонас).
Команда pack
(которая фактически дефрагментирует ваше рабочее пространство) также может пригодиться.
Если вы имеете дело с объектами, содержащими> 10 миллионов или около того значений, то память может легко стать проблемой. Бросить аппаратное обеспечение в проблему (то есть купить больше оперативной памяти) может быть вариантом, но есть предел тому, чего вы можете достичь.
Я предлагаю вам подходить к перекодированию вещей, чтобы сделать их более эффективными по памяти:
Посмотрите, есть ли переменные, которые вам не нужно выделять. Классическим примером этого является случай, когда функция возвращает значение того же размера, что и ее ввод.
function x = XPlus1(x)
x = x + 1;
end
более эффективно использует память, чем
function y = XPlus1(x)
y = x + 1;
end
Далее попробуйте разбить вашу проблему на маленькие кусочки. На простейшем уровне это может включать выполнение операции над строками вместо всей матрицы или над отдельными элементами вместо вектора. (Стоимость зацикливания меньше, чем стоимость того, чтобы он вообще не работал из-за ограничений памяти.) Затем вы должны восстановить свой ответ по частям.
Этот шаг, по сути, является философией beh map-Reduce, так что в качестве бонуса ваш код будет легче распараллеливаться.