MATLAB'de, clear mex
tüm MEX dosyalarını bellekten kaldırır (kilitlenmedikçe). MacOS'un önceki sürümlerinde, bir MEX dosyasını yeniden derleyebildim ve değiştirilmiş sürümü MATLAB'ı yeniden başlatmadan, sadece bir clear mex
komut vererek çalıştırabildim . Bu artık Mojave altında mümkün değil.
Örneğin, şu önemsiz MEX dosyasını ( get_data_pointer.c
) alın:
#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]);
}
MEX dosyasını oluşturabilir ve
mex get_data_pointer.c
get_data_pointer(0)
Temizlemek için,
clear mex
[~,mexfiles] = inmem
version -modules
inmem
gerçekten bellekte hiçbir MEX dosyası yüklenmediğini gösteren boş bir hücre dizisi döndürür, ancak version -modules
( bu cevaptan belgelenmemiş ) /Users/cris/matlab/get_data_pointer.mexmaci64
çıktısında hala görünür. Ve MEX dosyası kaynak kodunun değiştirilmesi ve yeniden derlenmesi, MEX dosyasının hiçbir zaman yeniden yüklenmediğini, eski sürümün MATLAB'den çıkana kadar hala çalıştırıldığını gösterir.
Bunu macOS Mojave'deki MATLAB R2017a'da görüyorum. Bu, High Sierra altındaki aynı MATLAB sürümünde hiçbir zaman sorun olmadı.
MATLAB'ı yeniden başlatmadan MEX dosyasını kaldırmaya nasıl zorlayabilirim?