Как получить доступ к информации памяти в Matlab на Unix-эквиваленте пользовательского представления.MaxPossibleArrayBytes

Я ищу эквивалент данных, возвращаемых памятью на платформе windows в unix, в matlab.

Я знаю о возможности использования unix ('vm_stat'), но конкретная часть информации, которая мне нужна, - это самый большой непрерывный свободный блок памяти.

эта информация возвращается памятью следующим образом:

[userview, ~] = memory;
a = userview.MaxPossibleArrayBytes

кто - нибудь не знает, как написать команду unix, которая могла бы вернуть эту же информацию?

1 ответов


вызовите команду "free" и проанализируйте результаты. Это работает на Linux

[r,w] = unix('free | grep Mem');
stats = str2double(regexp(w, '[0-9]*', 'match'));
memsize = stats(1)/1e6;
freemem = (stats(3)+stats(end))/1e6;

выход находится в Гбайтах. Последнее число бесплатных возвратов-это "кэшированная" память, используемая ОС, например динамические библиотеки. Его можно вообще использовать, но вы можете решить оставить его и просто использовать то, что Бесплатные отчеты как "свободные" - третье числовое поле на выходе.

редактировать в Linux распределение памяти в MATLABs mxMalloc / mxCalloc, скорее всего, просто вызывает malloc и друзья. Чтобы получить подсказку, что это так, выполните следующий эксперимент. В файле mex выделите массив, используя следующий код, и верните его в MATLAB:

  rout = calloc(sizeof(Double),M*N);
  pargout[0] = mxCreateNumericMatrix(0,0,mxDOUBLE_CLASS,mxREAL);
  mxSetM(pargout[0], m);
  mxSetN(pargout[0], n);
  mxSetData(pargout[0], rout);
  mexMakeMemoryPersistent(rout);

обычно вы можете использовать переменную, возвращаемую в MATLAB. Вы даже можете очистить его - это не вызывает никаких проблем. Если действительно MATLAB просто использует malloc, я не знаю, каким образом они могут обеспечить физическую непрерывную память.

Я знаю, что вы не можете запустить вышеуказанный код на Windows, хотя. Этот код аварийно завершает работу MATLAB. Конечно, вы не должны делать этого в своих кодах. Это просто иллюстрирует суть.