No MATLAB, clear mex
descarrega todos os arquivos MEX da memória (a menos que estejam bloqueados). Nas versões anteriores do macOS, eu era capaz de recompilar um arquivo MEX e executar a versão modificada sem reiniciar o MATLAB, simplesmente emitindo um clear mex
comando. Isso não é mais possível no Mojave.
Por exemplo, pegue este arquivo MEX trivial ( 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]);
}
Podemos criar o arquivo MEX e carregá-lo na memória com
mex get_data_pointer.c
get_data_pointer(0)
Para limpar,
clear mex
[~,mexfiles] = inmem
version -modules
inmem
na verdade, retorna uma matriz de células vazia indicando que nenhum arquivo MEX está carregado na memória, mas version -modules
(não documentado, a partir desta resposta ) ainda aparece /Users/cris/matlab/get_data_pointer.mexmaci64
em sua saída. E alterar o código-fonte do arquivo MEX e recompilar demonstra que, de fato, o arquivo MEX nunca é recarregado, a versão antiga ainda está sendo executada até a saída do MATLAB.
Estou vendo isso no MATLAB R2017a no macOS Mojave. Isso nunca foi um problema com a mesma versão do MATLAB no High Sierra.
Como forçar o MATLAB a descarregar o arquivo MEX sem reiniciar?