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