Выделение неинициализированной динамической памяти с помощью диспетчера памяти 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 ®
Cmalloc функция.
В файлах MEX, но не в приложениях MAT или ядра, mxMalloc регистрирует выделенную память в менеджере памяти MATLAB. Когда элемент управления возвращается к подсказке MATLAB, менеджер памяти автоматически освобождает или освобождает эту память.
Управление памятью, созданной этой функцией, зависит от назначения присвоенных ей данных. Если он назначен аргументу вывода в 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