| 外部インタフェース/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 (廃版) | ![]() |