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