Перераспределение динамической памяти с помощью диспетчера памяти 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 или модуля mxRealloc прибыль NULL в C (0 в Fortran) и оставляет исходный блок памяти без изменений. (Использование mxFree для освобождения исходного блока памяти). Если файл MEX не выполнен, то файл MEX завершается, и элемент управления возвращается в подсказку MATLAB ®.
mxRealloc неуспешно, если недостаточно свободного пространства кучи.
mxRealloc изменяет размер блока памяти, который был выделен mxCalloc, mxMalloc, или mxRealloc. Для выделения памяти в приложениях MATLAB используйте mxRealloc вместо ANSI ®
Crealloc функция.
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[] использование функции, такой как mxSetDoubles, то MATLAB отвечает за освобождение памяти.
При внутреннем использовании данных менеджер памяти MATLAB ведет список всей памяти, выделенной функцией, и автоматически освобождает (освобождает) память, когда элемент управления возвращается к подсказке MATLAB. В целом, рекомендуется, чтобы файловые функции MEX уничтожали их собственные временные массивы и освобождали их динамически выделяемую память. Более эффективно выполнить эту очистку в исходном MEX-файле, чем полагаться на автоматический механизм. Поэтому по завершении использования памяти, выделенной этой функцией, вызовите mxFree для освобождения памяти.
Если эти данные не назначены аргументу вывода и они должны сохраняться после завершения работы файла MEX, вызовите mexMakeMemoryPersistent после вызова этой функции. Если вы пишете файл MEX с постоянной памятью, то обязательно зарегистрируйте mexAtExit функция освобождения выделенной памяти в случае очистки файла MEX.
mexAtExit, mexMakeArrayPersistent, mexMakeMemoryPersistent, mxCalloc, mxDestroyArray, mxFree, mxMalloc