2012-03-27 6 views
7

私はMexファイルを書くつもりです。だから私のC++コードをMATLABで使うことができます。C++/MATLAB Mexバインディング

このコードは、シングルトンクラス(C++)で構築されています。

私はメモリが永続的であることを読んだことがあります.Malloc/newのMxAlloc isnteadを使用する必要があります。これは、使用しているすべてのメモリに当てはまりますか?つまり、私が持っているクラスはベクトルを使い、ベクトルは標準的なメカニズムを使って新しいメモリを自動的に割り当てます。

MxAllocを使って割り当てられたクラスのベクトルは、メモリを保持するのに問題がありますか?

+0

偉大な質問 - この問題はあまりよくドキュメントで説明されていません。私は、MEX互換にするために各メモリコールを変更する必要があると考えて、ライブラリ全体を不必要に書き直す人々について聞いてきました。 –

+0

ありがとうございます!ライブラリはまだ開発中で、私はライブラリのインスタンスが2つ、c/C++ワーク用とMATLABプロトタイプ用の2つのインスタンスを作成するので、私が避けたかったのと同じものです。 –

+0

しかし、私が完全にはわからない微妙なことがあることを心に留めてください。たとえば、Mexファイルが中断された場合(例えばエラーが発生した場合)、標準のCメソッドで割り当てられたメモリは適切に割り当て解除されないかもしれません。 –

答えて

7

Matlabに返すデータには、MxAllocのみを使用します。ライブラリ内にあるものはすべて通常どおりに割り当てることができます。

あなたが気づいておきたいことは、あなたのライブラリがいつでもアンロードできることです。通常、ユーザーがmexFunctionを呼び出すと、ライブラリがロードされ、後続の呼び出しのためにロードされたままになります。しかし、いつでもMatlabはあなたのライブラリをアンロードするかもしれないので、あなたのmexFunctionのすべてのリソースは解放されます。

+3

必要に応じて、mexLock http://www.mathworks.co.uk/help/techdoc/apiref/mexlock.htmlを使用して、mexファイルがアンロードされないようにすることができます。 – Edric

関連する問題