私のC mexコンパイル済みファイルのメモリが不足しています(具体的には、mxMalloc
への私の呼び出しは時々NULL
を返します)。簡単な計算では、私のファイルはmxMalloc
に約500 MBのメモリ(おそらく1 GB)を求めていると推測し、Matlabをほとんど実行している64 GBのLinuxマシンでファイルを実行します。しかし、mxMalloc
は非常に頻繁にNULL
を返します。Matlabのmexプログラムにさらにメモリを割り当てる
これは何らかの理由で(メモリの断片化など)発生する可能性がありますが、いずれの場合でも、500 MBは16 GBメモリのマシンから聞こえるほどではないようです。
mxMalloc
への私の呼び出しは、Matlabのヒープからメモリを要求しますが、それについて100%は確信していません。(mxMalloc
要求は結局Matlabによって処理され、OSによって直接処理されません。私のmexファイルの「ヒープ」サイズを増やす方法はありますか?
おかげ
mex関数の1回の実行中に、または同じファイルの多数の実行後(ループ内)のある時点でメモリが不足していますか?私が尋ねる理由は、mexファイルを何度も実行した後で(メモリにループして)メモリの問題が発生していたことです。問題は私がmexの結果をmatlabに戻す方法にあることがわかりました。 – Marcin
@Marcin、それは通常、mexファイルを数回(10回)呼び出した後に起こります。私は、私がやっている何かが間違っている場合に、私がmexの結果をMatlabに返す方法をもっと注意深く見ていきますが、私が知っておくべきことは何か(例えば、一般的な悪い対良い練習)ですか?返す前に私のデータを 'mxFree'したら、ヒープを元の断片化状態に戻してはいけませんか? –
こちらをご覧ください(http://goo.gl/sYB3R)。多分、このポストはあなたに問題の可能性がある手がかりを与えるでしょう。 – Marcin