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.

размер

Новый размер выделенной памяти, в байтах.

Возвращается

Указатель на запуск перераспределенного блока памяти, в случае успеха. Если неудачный в 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, диспетчер памяти затем автоматически освобождает или освобождает, эта память.

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

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

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

Примеры

См. следующие примеры в matlabroot / extern / examples / mx.

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

Была ли эта тема полезной?