Выделите неинициализированную динамическую память с помощью диспетчера памяти MATLAB
#include "matrix.h" #include <stdlib.h> void *mxMalloc(mwSize n);
#include "fintrf.h" mwPointer mxMalloc(n) mwSize n
n
Количество байтов, выделяемых для n
больше 0
Указатель на запуск выделенной динамической памяти, если это успешно. Если это неудачно в автономном приложении MAT или engine, то mxMalloc
возвращает NULL
в C (0
на Фортране). Если это не удалось в файле MEX, то файл MEX завершается и управление возвращается в MATLAB® приглашение.
mxMalloc
неудачно, когда недостаточно свободного пространства в куче.
Если вы звоните mxMalloc
на C со значением n
= 0
, затем MATLAB возвращается либо NULL
или допустимый указатель.
mxMalloc
выделяет смежное пространство кучки, достаточное для удержания n
байты. Чтобы выделить память в приложениях MATLAB, используйте mxMalloc
вместо ANSI® C
malloc функция.
В файлах MEX, но не в приложениях MAT или engine, mxMalloc
регистрирует выделенную память в диспетчере памяти MATLAB. Когда управление возвращается к подсказке MATLAB, менеджер памяти затем автоматически освобождает, или deallocates, эту память.
То, как вы управляете памятью, созданной этой функцией, зависит от назначения данных, назначенных ей. Если вы присваиваете его выходному аргументу в plhs[]
использование функции, такой как mxSetDoubles
, тогда за освобождение памяти отвечает MATLAB.
Если вы используете данные внутри себя, то диспетчер памяти MATLAB поддерживает список всей памяти, выделенной функцией, и автоматически освобождает (освобождает) память, когда управление возвращается в подсказку MATLAB. В целом мы рекомендуем Файлу MEX функции уничтожать собственные временные массивы и освобождать собственную динамически выделенную память. Более эффективно выполнить эту очистку в исходном файле MEX, чем полагаться на автоматический механизм. Поэтому, когда вы закончите использовать память, выделенную этой функцией, вызовите mxFree
для удаления памяти.
Если вы не назначаете эти данные выходному аргументу и хотите, чтобы они сохранялись после завершения файла MEX, вызовите mexMakeMemoryPersistent
после вызова этой функции. Если вы записываете файл MEX с постоянной памятью, то обязательно зарегистрируйте mexAtExit
функция для освобождения выделенной памяти в случае удаления файла MEX.
См. эти примеры в
:matlabroot
/ extern/examples/mx
См. эти примеры в
:matlabroot
/ extern/examples/refbook
mexAtExit
, mexMakeArrayPersistent
, mexMakeMemoryPersistent
, mxCalloc
, mxDestroyArray
, mxFree
, mxRealloc