mxRealloc (C and 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 или 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.

Примеры

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

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