外部インタフェース/API リファレンス | ![]() ![]() |
MATLABのメモリマネージャを使ってダイナミックメモリを割り当て
C 言語表示
#include "matrix.h" #include <stdlib.h> void *mxCalloc(size_t n, size_t size);
引数
n
割り当てる要素数。これは、正の数値でなければなりません。
size
sizeof
演算子は、要素毎のバイト数を計算します)。
戻り値
成功した場合は、割り当てられたダイナミックメモリの先頭のポインタ。スタンドアロン(非MEX-ファイル)アプリケーションで成功しない場合、mxCalloc
はNULL
を出力します。MEX-ファイルで成功しない場合、MEX-ファイルは終了し、制御はMATLABプロンプトに戻ります。
mxCalloc
は、十分なフリーのヒープ領域がない場合は成功しません。
詳細
MATLABアプリケーションは、常にcalloc
ではなくmxCalloc
を呼び出してメモリを割り当てます。mxCalloc
は、スタンドアロンMATLABアプリケーションとMEX-ファイルとでは異なる動作をすることに注意してください。
MEX-ファイルでは、mxCalloc
はつぎのことを自動的に行います。
n
個の要素を保持するための連続するヒープ領域を割り当てます。n
個の要素をすべて0に初期化します。MATLABメモリ管理機能は、mxCalloc
によって割り当てられたすべてのメモリのリストをもっています。MATLABメモリ管理機能は、制御がMATLABプロンプトに戻るときにすべてのMEX-ファイルを自動的に開放(デアロケート)します。
スタンドアロンMATLABアプリケーションでは、mxCalloc
はデフォルトでANSI C関数calloc
を呼び出します。このデフォルトの動作が好ましくない場合は、ユーザ自身がメモリ割り当てルーチンを書き、mxSetAllocFcns
を使ってそのルーチンを登録することができます。その後、mxCalloc
が呼び出されるときには、mxCalloc
はcalloc
の代わりにユーザ定義のメモリ割り当てルーチンを呼び出します。
デフォルトでは、MEX-ファイルではmxCalloc
は固定でないmxCalloc
データを生成します。言い換えると、メモリ管理機能はMEX-ファイルが終了すると直ちにメモリを自動的に開放します。MEX-ファイルが終了した後でメモリを固定にしたい場合は、mxCalloc
を呼び出した後でmexMakeMemoryPersistent
を呼び出してください。固定メモリを使ってMEX-ファイルを書く場合は、MEX-ファイルがクリアされるイベントで割り当てられたメモリを開放する関数mexAtExit
を登録してください。
mxCalloc
によって割り当てられたメモリの利用を終了するときには、mxFree
を呼び出してください。mxFree
はメモリを開放します。
例題
examples
ディレクトリのmex
サブディレクトリのexplore.c
と、examples
ディレクトリのrefbook
サブディレクトリのphonebook.c
とrevord.c
を参照してください。
さらに、examples
ディレクトリのmx
サブディレクトリのmxcalcsinglesubscript.c
, mxsetallocfcns.c
, mxsetdimensions.c
を参照してください。
参考
mxFree
, mxDestroyArray
, mexMakeArrayPersistent
,mexMakeMemoryPersistent
, mxMalloc
, mxSetAllocFcns
![]() | mxCalcSingleSubscript | mxChar | ![]() |