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