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 или автономном приложении механизма, то 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 isNull в C (0 на Фортране), затем mxRealloc ведет себя как mxMalloc. mxRealloc выделяет новый блок памяти о size байты и возвращают указатель на новый блок.

Если size 0 и ptr не NULL в C (0 на Фортране), затем mxRealloc освобождает память, на которую указывает ptr и возвращает NULL в C (0 на Фортране).

В файлах MEX, но не MAT или приложениях механизма, mxRealloc указывает выделенную память с диспетчером памяти MATLAB. Когда управление возвращается к посдказке MATLAB, диспетчер памяти затем автоматически освобождает, или deallocates, эта память.

Как вы справляетесь, память, созданная этой функцией, зависит от цели данных, присвоенных ему. Если вы присваиваете его выходному аргументу в plhs[] использование функции, такой как mxSetDoubles, затем MATLAB ответственен за освобождение памяти.

Если вы используете данные внутренне, то диспетчер памяти MATLAB ведет список всей памяти, выделенной функцией, и автоматически освобождает (освобождает) память, когда управление возвращается к посдказке MATLAB. В общем случае мы рекомендуем, чтобы функции файла MEX уничтожили свои собственные временные массивы и освободили их собственную динамически выделенную память. Более эффективно выполнить эту очистку в исходном файле MEX, чем использовать автоматический механизм. Поэтому, когда вы закончили использовать память, выделенную этой функцией, вызовите mxFree освобождать память.

Если вы не присваиваете эти данные выходному аргументу, и вы хотите, чтобы они сохранились после того, как файл MEX завершается, то вызовите mexMakeMemoryPersistent после вызывания этой функции. Если вы пишете файл MEX с постоянной памятью, то, несомненно, укажете mexAtExit функционируйте к свободной выделенной памяти в конечном счете, ваш файл MEX очищен.

Примеры

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

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