mxRealloc (C および Fortran)
MATLAB メモリ マネージャーを使用した動的メモリの再割り当て
C 構文
#include "matrix.h" #include <stdlib.h> void *mxRealloc(void *ptr, mwSize size);
Fortran 構文
#include "fintrf.h" mwPointer mxRealloc(ptr, size) mwPointer ptr mwSize size
引数
ptr
mxCalloc
、mxMalloc
、またはmxRealloc
によって割り当てられたメモリのブロックへのポインター。size
割り当てられたメモリの新しいサイズ (バイト単位)。
戻り値
成功した場合は、再割り当てされたメモリのブロックの先頭へのポインター。MAT またはエンジン スタンドアロン アプリケーションで失敗した場合、mxRealloc
は、C では NULL
(Fortran では 0
) を返し、元のメモリ ブロックはそのまま残します (元のメモリ ブロックを解放するには関数 mxFree
を使用します)。MEX ファイルで失敗した場合、MEX ファイルは終了し、制御は MATLAB® プロンプトに戻ります。
mxRealloc
は、十分な空きヒープ領域がないと失敗します。
説明
mxRealloc
は、mxCalloc
、mxMalloc
、または mxRealloc
で割り当てられているメモリ ブロックのサイズを変更します。MATLAB アプリケーションでメモリを割り当てるには、ANSI® C の関数 realloc
ではなく、mxRealloc
を使用します。
mxRealloc
は、ptr
が指しているメモリ ブロックのサイズを size
バイトに変更します。再割り当てされたメモリの内容は、新しいサイズまたは古いサイズのどちらか小さい方のサイズに一致するまでは変更されません。再割り当てされたメモリは、元のメモリとは別の場所に配置される場合があります。したがって、返されるポインターは ptr
とは異なる可能性があります。メモリの場所が変更された場合、mxRealloc
は、ptr
が指している元のメモリ ブロックを解放します。
size
が 0
より大きく、ptr
が C において NULL
(Fortran では 0
) の場合、mxRealloc
は mxMalloc
のように動作します。mxRealloc
は size
バイトの新しいメモリ ブロックを割り当てて、新しいブロックへのポインターを返します。
size
が 0
であり、ptr
が C において NULL
(Fortan では 0
) ではない場合、mxRealloc
は ptr
が指しているメモリを解放し、C では NULL
(Fortan では 0
) を返します。
MAT やエンジン アプリケーション以外の MEX ファイルでは、mxRealloc
は割り当てられたメモリを MATLAB メモリ マネージャーに登録します。制御が MATLAB プロンプトに戻ると、メモリ マネージャーはこのメモリを自動的に解放、つまり "割り当て解除" します。
この関数によって作成されるメモリの管理方法は、それに割り当てられるデータの目的によって異なります。mxSetDoubles
のような関数を使用してメモリを plhs[]
の出力引数に割り当てる場合、MATLAB はメモリを解放しなければなりません。
データを内部で使用する場合、MATLAB メモリ マネージャーは、関数によって割り当てられたすべてのメモリのリストを維持し、制御が MATLAB プロンプトに戻ったときにメモリを自動的に解放 (割り当て解除) します。一般的には、MEX ファイル関数が独自の一時的な配列を破棄し、動的に割り当てられた独自のメモリを解放することを推奨します。自動メカニズムに依存するより、ソース MEX ファイルでこのクリーンアップを実行する方がより効率的です。したがって、この関数によって割り当てられたメモリを使用し終わったら、mxFree
を呼び出してメモリの割り当てを解除してください。
このデータを出力引数に割り当てずに、MEX ファイルの終了後にデータを存続させる場合は、この関数の呼び出し後に mexMakeMemoryPersistent
を呼び出します。永続的なメモリを使用する MEX ファイルを作成する場合は、MEX ファイルがクリアされたときのために、関数 mexAtExit
を登録し、割り当てられたメモリを解放するようにしてください。
参考
mexAtExit
, mexMakeArrayPersistent
, mexMakeMemoryPersistent
, mxCalloc
, mxDestroyArray
, mxFree
, mxMalloc
バージョン履歴
R2006a より前に導入