In MATLAB, clear mex
scarica tutti i file MEX dalla memoria (a meno che non siano bloccati). Nelle versioni precedenti di macOS, ero in grado di ricompilare un file MEX ed eseguire la versione modificata senza riavviare MATLAB, semplicemente emettendo un clear mex
comando. Questo non è più possibile sotto Mojave.
Ad esempio, prendi questo banale file 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]);
}
Possiamo creare il file MEX e caricarlo in memoria con
mex get_data_pointer.c
get_data_pointer(0)
Per cancellarlo,
clear mex
[~,mexfiles] = inmem
version -modules
inmem
in effetti restituisce un array di celle vuoto che indica che nessun file MEX è caricato in memoria, ma version -modules
(non documentato, da questa risposta ) mostra ancora /Users/cris/matlab/get_data_pointer.mexmaci64
nel suo output. E cambiando il codice sorgente del file MEX e ricompilando si dimostra che, in effetti, il file MEX non viene mai ricaricato, la vecchia versione è ancora in esecuzione fino a quando non si esce da MATLAB.
Lo vedo su MATLAB R2017a su macOS Mojave. Questo non è mai stato un problema con la stessa versione MATLAB in High Sierra.
Come posso forzare MATLAB a scaricare il file MEX senza riavviare?