Профилирование памяти столбцов MATLAB, что означает

Я использую профиль MATLAB для наблюдения за памятью с помощью команды

profile -memory on
profile clear
% my code
profile report

и я получил эту таблицу enter image description here

1- я хочу спросить о значении Выделенная память, свободная память, память SelfMemory и пиковая память

2- в чем смысл отрицательной памяти?

Ответ 1

После быстрого google, похоже, никто не знает, кроме, возможно, MathWorks, и они не говорят. (Я шучу, но на самом деле я нашел очень мало информации по этому вопросу).

Логически, однако, я бы интерпретировал имена столбцов следующим образом:

Выделенная память = общий объем памяти, выделяемый внутри функции, и любые вызовы.

Освобожденная память = общий объем памяти, освобожденный внутри функции, и любые вызовы.

Пиковая память = максимальный объем используемой памяти в любой момент времени во время выполнения функции.

Self Memory = объем памяти, используемой функцией, но не содержащий функций, которые он вызывает.

Я бы предположил, что отрицательная "Self Memory" указывает, что функция освобождает больше памяти, чем она выделяет. Это может быть то, что у него есть собственность на переданный ему кусок данных, который он затем очищает. Например:

function A()
  foo = B();
  clear foo
end

function foo = B()
  foo = rand(10000,10000);
end

В приведенном выше примере данные создаются при вызове B, и поскольку Matlab использует ленивое управление памятью копии, этот случай работает в значительной степени как передача по ссылке для возвращаемого значения. Итак, B выделяет память, а A освобождает ее.

Действительно, запуск этого кода с помощью метода профилирования в вопросе дает следующий результат, который поддерживает мою гипотезу.

profile report