W MATLAB, clear mex
zwalnia wszystkie pliki MEX z pamięci (chyba że są zablokowane). W poprzednich wersjach systemu macOS mogłem ponownie skompilować plik MEX i uruchomić zmodyfikowaną wersję bez ponownego uruchamiania MATLAB, po prostu wydając clear mex
polecenie. Nie jest to już możliwe w ramach Mojave.
Weźmy na przykład ten trywialny plik MEX ( get_data_pointer.c
):
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
plhs[0] = mxCreateNumericMatrix(1, 1, mxUINT64_CLASS, mxREAL);
*(uint64_t*)mxGetData(plhs[0]) = (uint64_t)mxGetData(prhs[0]);
}
Możemy utworzyć plik MEX i załadować go do pamięci za pomocą
mex get_data_pointer.c
get_data_pointer(0)
Aby to wyczyścić,
clear mex
[~,mexfiles] = inmem
version -modules
inmem
rzeczywiście zwraca pustą tablicę komórek wskazującą, że żadne pliki MEX nie są załadowane do pamięci, ale version -modules
(nieudokumentowane, z tej odpowiedzi ) nadal pokazuje /Users/cris/matlab/get_data_pointer.mexmaci64
na wyjściu. A zmiana kodu źródłowego pliku MEX i ponowna kompilacja pokazuje, że plik MEX nigdy nie jest ponownie ładowany, stara wersja jest nadal uruchomiona, dopóki nie wyjdzie z MATLAB.
Widzę to na MATLAB R2017a na macOS Mojave. To nigdy nie było problemem z tą samą wersją MATLAB w High Sierra.
Jak zmusić MATLAB do zwolnienia pliku MEX bez ponownego uruchamiania?