6

私は、MATLABのUNIX上のWindowsプラットフォームのメモリによって返されるデータに相当するものを探しています。

私はunix('vm_stat')を使用する可能性を認識していますが、必要な情報の特定の部分は、最大の連続した空きメモリブロックです。

この情報は、次のようにメモリによって返されます。

[userview, ~] = memory;
a = userview.MaxPossibleArrayBytes

これと同じ情報を返すことができるunixコマンドを書く方法がない人はいますか?

4

1 に答える 1

9

コマンド「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をクラッシュさせます。もちろん、コードでそれを行うべきではありません。それは単に要点を説明するだけです。

于 2012-09-10T11:24:07.737 に答える