Main Content

Persistent mxArrays

You can exempt an array, or a piece of memory, from the MATLAB®automatic cleanup by callingmexMakeArrayPersistentormexMakeMemoryPersistent. However, if a MEX function creates persistent objects, then a memory leak could occur if the MEX function is cleared before the persistent object is properly destroyed. To prevent memory leaks, use themexAtExit函数来注册一个函数来释放内存for objects created using these functions.

The following MEX file code creates a persistent array and properly disposes of it.

#include "mex.h" static int initialized = 0; static mxArray *persistent_array_ptr = NULL; void cleanup(void) { mexPrintf("MEX file is terminating, destroying array\n"); mxDestroyArray(persistent_array_ptr); } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!initialized) { mexPrintf("MEX file initializing, creating array\n"); /* Create persistent array and register its cleanup. */ persistent_array_ptr = mxCreateDoubleMatrix(1, 1, mxREAL); mexMakeArrayPersistent(persistent_array_ptr); mexAtExit(cleanup); initialized = 1; /* Set the data of the array to some interesting value. */ *mxGetDoubles(persistent_array_ptr) = 1.0; } else { mexPrintf("MEX file executing; value of first array element is %g\n", *mxGetDoubles(persistent_array_ptr)); } }

See Also

|

Related Topics