ใน MATLAB ให้clear mex
ยกเลิกการโหลดไฟล์ MEX ทั้งหมดจากหน่วยความจำ (เว้นแต่ว่าพวกเขาจะถูกล็อค) ภายใต้ macOS เวอร์ชันก่อนหน้าฉันสามารถคอมไพล์ไฟล์ MEX อีกครั้งและรันเวอร์ชันที่แก้ไขโดยไม่ต้องรีสตาร์ท MATLAB เพียงแค่ออกclear mex
คำสั่ง สิ่งนี้ไม่สามารถทำได้ใน Mojave อีกต่อไป
ตัวอย่างเช่นใช้ไฟล์ 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]);
}
เราสามารถสร้างไฟล์ MEX และโหลดในหน่วยความจำด้วย
mex get_data_pointer.c
get_data_pointer(0)
เพื่อล้างมัน
clear mex
[~,mexfiles] = inmem
version -modules
inmem
แน่นอนส่งคืนอาร์เรย์เซลล์ว่างเปล่าที่ระบุว่าไม่มีไฟล์ MEX โหลดอยู่ในหน่วยความจำ แต่ยังversion -modules
ไม่มีการบันทึก (จากคำตอบนี้ ) /Users/cris/matlab/get_data_pointer.mexmaci64
ในเอาต์พุต และการเปลี่ยนซอร์สโค้ดไฟล์ MEX และการคอมไพล์ใหม่แสดงให้เห็นว่าแท้จริงแล้วไฟล์ MEX จะไม่รีโหลด แต่เวอร์ชันเก่ายังคงทำงานอยู่จนกว่าจะมีใครออกจาก MATLAB
ฉันเห็นสิ่งนี้ใน MATLAB R2017a บน macOS Mojave นี่ไม่เคยมีปัญหากับรุ่น MATLAB เดียวกันภายใต้ High Sierra
ฉันจะบังคับให้ MATLAB ยกเลิกการโหลดไฟล์ MEX โดยไม่ต้องเริ่มใหม่ได้อย่างไร