Перераспределите динамическую память с помощью диспетчера памяти 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
.
size
Новый размер выделенной памяти, в байтах.
Указатель на запуск перераспределенного блока памяти, если это успешно. Если это неудачно в автономном приложении MAT или engine, то 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
bytes и возвращает указатель на новый блок.
Если size
является 0
и ptr
не NULL
в C (0
на Фортране), затем mxRealloc
освобождает память, на которую указывает ptr
и возвращает NULL
в C (0
на Фортране).
В файлах MEX, но не в приложениях MAT или engine, mxRealloc
регистрирует выделенную память в диспетчере памяти MATLAB. Когда управление возвращается к подсказке MATLAB, менеджер памяти затем автоматически освобождает, или deallocates, эту память.
То, как вы управляете памятью, созданной этой функцией, зависит от назначения данных, назначенных ей. Если вы присваиваете его выходному аргументу в plhs[]
использование функции, такой как mxSetDoubles
, тогда MATLAB отвечает за освобождение памяти.
Если вы используете данные внутри себя, то диспетчер памяти MATLAB поддерживает список всей памяти, выделенной функцией, и автоматически освобождает (освобождает) память, когда управление возвращается в подсказку MATLAB. В целом мы рекомендуем Файлу MEX функции уничтожать собственные временные массивы и освобождать собственную динамически выделенную память. Более эффективно выполнить эту очистку в исходном файле MEX, чем полагаться на автоматический механизм. Поэтому, когда вы закончите использовать память, выделенную этой функцией, вызовите mxFree
для удаления памяти.
Если вы не назначаете эти данные выходному аргументу и хотите, чтобы они сохранялись после завершения файла MEX, вызовите mexMakeMemoryPersistent
после вызова этой функции. Если вы записываете файл MEX с постоянной памятью, то обязательно зарегистрируйте mexAtExit
функция для освобождения выделенной памяти в случае удаления файла MEX.
mexAtExit
, mexMakeArrayPersistent
, mexMakeMemoryPersistent
, mxCalloc
, mxDestroyArray
, mxFree
, mxMalloc