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.

Limpieza automática de matrices temporales

Cuando una función MEX devuelve el control a, devuelve los resultados de sus cálculos en los argumentos de salida, la s contenida en los argumentos del lado izquierdo.MATLAB®mxArrayplhs[] Estas matrices deben tener un ámbito temporal, por lo que no pase matrices creadas con la función en. destruye cualquier creado por la función MEX que no está en. también libera cualquier memoria que se asignó en la función MEX utilizando el,, o funciones.mexMakeArrayPersistentplhsMATLABmxArrayplhsMATLABmxCallocmxMallocmxRealloc

recomienda que las funciones MEX destruyan sus propias matrices temporales y liberen su propia memoria asignada dinámicamente.MathWorks® Es más eficaz realizar esta limpieza en el archivo MEX de origen que depender del mecanismo automático. Sin embargo, hay varias circunstancias en las que la función MEX no alcanza su declaración de retorno normal.

No se alcanza el retorno normal si:

  • llamadas y la función que se llama crea un error.MATLABmexCallMATLAB (Un archivo MEX fuente puede atrapar tales errores mediante el uso de la función, pero no todos los archivos MEX necesariamente necesitan interceptar errores.)mexCallMATLABWithTrap

  • El usuario interrumpe la ejecución de la función MEX utilizando.Ctrl + C

  • La función MEX se ejecuta de memoria. El controlador de fuera de memoria finaliza la función MEX.MATLAB

En el primer caso, un programador MEX puede garantizar la limpieza segura de las matrices temporales y la memoria antes de devolver, pero no en los dos últimos casos. El mecanismo de limpieza automática es necesario para evitar fugas de memoria en esos casos.

Debe usar las funciones proporcionadas, como y, para administrar la memoria.MATLABmxCallocmxFree No utilice los homólogos de la biblioteca de C estándar; hacerlo puede producir resultados inesperados, incluida la terminación del programa.

Ejemplo

Este ejemplo muestra cómo asignar memoria para las variables en una función MEX. Por ejemplo, si la primera entrada a la función () es una cadena, para manipular la cadena, cree un búfer de tamaño.prhs[0]bufbuflen Las siguientes sentencias declaran estas variables:

char *buf; int buflen; 

El tamaño del búfer depende del número de dimensiones de la matriz de entrada y del tamaño de los datos de la matriz. Esta instrucción calcula el tamaño de:buflen

buflen = mxGetN(prhs[0])*sizeof(mxChar)+1;

A continuación, asigne memoria para:buf

buf = mxMalloc(buflen);

Al final del programa, si usted no vuelve como parámetro de salida, después libre su memoria como sigue:bufplhs

mxFree(buf);

Antes de salir de la función MEX, destruya las matrices temporales y la memoria gratuita asignada dinámicamente, excepto si se devuelve dicho tipo en la lista de argumentos de salida, devuelta por, o utilizada para crear una estructura.mxArraymexGetVariablePtr Además, nunca elimine los argumentos de entrada.

Se utiliza para liberar memoria asignada por las funciones o, o.mxFreemxCallocmxMallocmxRealloc Se usa para liberar memoria asignada por las funciones.mxDestroyArraymxCreate*

Consulte también

|

Temas relacionados