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