Выделение динамической памяти для массива, инициализированного в 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Количество байтов на элемент. (С) sizeof оператор вычисляет количество байтов на элемент.)
Указатель на начало выделенной динамической памяти, если она выполнена успешно. При неуспешном выполнении автономного приложения MAT или двигателя mxCalloc прибыль NULL в C (0 в Фортране). В случае неуспешного завершения в файле MEX, файл MEX прерывается и элемент управления возвращается в подсказку MATLAB ®.
mxCalloc неуспешно, если недостаточно свободного пространства кучи.
mxCalloc выделяет непрерывное кучное пространство, достаточное для хранения n элементы size байт каждый и инициализирует эту вновь выделенную память в 0. Для выделения памяти в приложениях MATLAB используйте mxCalloc вместо ANSI ®
Ccalloc функция.
В файлах MEX, но не в приложениях MAT или ядра, mxCalloc регистрирует выделенную память в менеджере памяти MATLAB. Когда элемент управления возвращается к подсказке MATLAB, менеджер памяти автоматически освобождает или освобождает эту память.
Управление памятью, созданной этой функцией, зависит от назначения присвоенных ей данных. Если он назначен аргументу вывода в 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