外部インタフェース/API リファレンス | ![]() ![]() |
mxCalloc
によって割り当てられたダイナミックメモリを開放
C 言語表示
#include "matrix.h" void mxFree(void *ptr);
引数
ptr
mxCalloc
によって割り当てられたメモリの先頭のポインタ。
詳細
MATLABアプリケーションは、ヒープ領域を開放するために、ANSI Cの関数free
ではなくmxFree
を常に呼び出します。
mxFree
は、スタンドアロンMATLABアプリケーションでの動作とMEX-ファイルでの動作が異なります。
MEX-ファイルでは、mxFree
は自動的につぎのことを行います。
ptr
で始まる連続するヒープ領域を開放するANSI C関数free
を呼び出します。MATLABメモリ管理機能は、mxCalloc
(とmxCreate
の呼び出し)によって割り当てられたすべてのメモリのリストをもっています。MATLABメモリ管理機能は、制御がMATLABプロンプトに戻るときにすべてのMEX-ファイルを自動的に開放します。
デフォルトでは、mxFree
がスタンドアロンMATLABアプリケーションに現れるとき、mxFree
は単にANSI C 関数free
を呼び出します。このデフォルトの動作が好ましくない場合は、mxSetAllocFcns
を使ってユーザ自身のメモリ開放ルーチンを書いて登録することができます。その後、mxFree
が呼び出されるときには、mxFree
はfree
の代わりにユーザ定義のメモリ割り当てルーチンを呼び出します。
MEX-ファイルでは、mxFree
の使用は、指定したメモリが固定かそうでないかにより異なります。デフォルトでは、mxCalloc
によって作成されたメモリは固定ではありません。しかし、アプリケーションがmexMakeMemoryPersistent
を呼び出す場合は、指定したメモリは固定になります。
MATLABメモリ管理機能は、MEX-ファイルが終了するときにすべての固定でないメモリを自動的に開放します。そのため、mxFree
を呼び出さなくても、MATLABはユーザに代わってメモリの開放を行います。それでも、MEX-ファイルの使用の終了後に直ちにメモリを開放することは、良いプログラミングの習慣です。そうすることによって、一般にシステム全体がより効率的に実行されます。
MEX-ファイルを終了するとき、MATLABメモリ管理機能は、固定メモリを開放しません。そのため、固定メモリを開放する唯一の方法は、mxFree
を呼び出すことです。一般に、MEX-ファイルはクリーンアップハンドラを登録するためにmexAtExit
を呼び出します。そのとき、クリーンアップハンドラは、mxFree
を呼び出します。
例題
examples
ディレクトリのmx
サブディレクトリのmxcalcsinglesubscript.c
を参照してください。
さらに、examples
ディレクトリのrefbook
サブディレクトリのphonebook.c
と、examples
ディレクトリのmex
サブディレクトリのexplore.c
とmexatexit.c
と、examples
ディレクトリのmx
サブディレクトリのmxcreatecharmatrixfromstr.c
, mxisfinite.c
, mxmalloc.c
, mxsetallocfcns.c
, mxsetdimensions.c
を参照してください。
参考
mxCalloc
, mxDestroyArray
, mxMalloc
, mexMakeArrayPersistent
, mexMakeMemoryPersistent
![]() | mxDuplicateArray | mxFreeMatrix (廃版) | ![]() |