mxRealloc (C и Фортран)

Перераспределите использование динамической памяти диспетчер памяти 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 является NULL в 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