Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

MxArrays persistentes

Puede eximir una matriz, o un fragmento de memoria, de la limpieza automática llamando o.MATLAB®mexMakeArrayPersistentmexMakeMemoryPersistent Sin embargo, si una función MEX crea los objetos persistentes, después una fuga de memoria podría ocurrir si la función MEX se borra antes de que el objeto persistente se destruya correctamente. Para evitar fugas de memoria, utilice la función para registrar una función para liberar la memoria de los objetos creados con estas funciones.mexAtExit

El siguiente código de archivo MEX crea una matriz persistente y se deshace correctamente de ella.

#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));   } }

Consulte también

|

Temas relacionados