exponenta event banner

mxRealloc (C и Fortran)

Перераспределение динамической памяти с помощью диспетчера памяти MATLAB

Синтаксис C

#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.

Примеры

См. эти примеры в разделе matlabroot/extern/examples/mx:

Представлен до R2006a