コマンド「free」を呼び出して、結果を解析します。これはLinuxで動作します
[r,w] = unix('free | grep Mem');
stats = str2double(regexp(w, '[0-9]*', 'match'));
memsize = stats(1)/1e6;
freemem = (stats(3)+stats(end))/1e6;
出力はギガバイト単位です。フリーリターンの最後の数は、OSによって使用される「キャッシュされた」メモリです(ダイナミックライブラリなど)。通常は使用できますが、省略して、無料のレポートを「無料」として使用することもできます。これは、出力の3番目の数値フィールドです。
編集Linuxでは、MATLAB mxMalloc / mxCalloc内のメモリ割り当ては、おそらく単にmallocとその仲間を呼び出します。これが当てはまるというヒントを得るには、次の実験を行ってください。mexファイルで、次のコードを使用して配列を割り当て、MATLABに返します。
rout = calloc(sizeof(Double),M*N);
pargout[0] = mxCreateNumericMatrix(0,0,mxDOUBLE_CLASS,mxREAL);
mxSetM(pargout[0], m);
mxSetN(pargout[0], n);
mxSetData(pargout[0], rout);
mexMakeMemoryPersistent(rout);
通常、MATLABで返される変数を使用できます。あなたもそれをクリアすることができます-これは問題を引き起こしません。実際にMATLABが単にmallocを使用している場合、物理的に隣接するメモリを強制できる方法を私が知る方法はありません。
ただし、上記のコードをWindowsで実行することはできません。このコードはMATLABをクラッシュさせます。もちろん、コードでそれを行うべきではありません。それは単に要点を説明するだけです。