2016-03-22 5 views
1

mxGetPrまたはmxReallocによって返されたポインタが与えられても、引き続きその長さを取得できますか? MATLABはポインタのメモリを管理するので、クエリ用のメタデータを格納していますか?mxReallocまたはmxMallocから返されるポインタの長さを知ることはできますか?

+0

['mxGetNumberOfElements'](http://www.mathworks.com/help/matlab/apiref/mxgetnumberofelements.html)または[' mxGetDimensions'](http://www.mathworks.com/help)を使用できますか? /matlab/apiref/mxgetnumberofelements.html)? – Suever

+0

ポインタの長さは 'sizeof(pointer_name)'の型と同じです。それともそれが指しているオブジェクトを意味していますか? – Olaf

+0

私は彼が割り当てられたバイト数を意味すると思います。 – FredK

答えて

0

あなたの質問は少し不明瞭なので、私は2つの機能を説明してみましょう:

  • mxGetPrは、正確には(そのデータへのポインタをポインタを取得するために、既存のmxArray数値配列で呼び出されますdouble実データ)。このデータの長さを知りたい場合は、mxGetNumberOfElementsを使用して元の配列自体を照会することができます。

  • mxReallocと関連する関数は、Cで利用可能な標準のmallocファミリーファミリーに似ています。したがって、あなたがそれらを使用しているなら、あなたはメモリを割り当てているので、あなたはどのサイズですか?

mxReallocの目的は、MATLABがメモリをある程度自動的に管理できるようにすることです。 MEX関数が返ってくると、MATLABはmxMallocなどで割り当てられた登録されたヒープメモリを解放します。

ここで良いコードを書くということは、あなた自身のメモリを解放すべきであることを意味します(この自動メモリ管理に頼ると処理が遅くなる可能性があります)が、特定のケースでは便利です終了時にリソースが解放されることを保証するために醜いgotoステートメントに依存する必要があります)。

+0

内部について興味があれば、ほとんどのメモリアロケータはヒープ割り当て配列の長さを配列自体の直前に格納すると思います( 'ptr [-1]'のヘッダのように)。また、一部の実装のデバッグバージョンでは、バッファオーバーフローをキャッチするためのバインドチェックのために、ヘッダー/フッタースペースに余分なものを格納することがあります。 – Amro

関連する問題