1

私は現在、MATLABでさまざまな信号処理アルゴリズムを実装しており、後でこれらの1つをC++で実装します。これらから選択するために、いくつかのテストを実行します。1つはメモリ使用量のチェックです。つまり、さまざまなアルゴリズムが使用するメモリの量を確認したいと思います。実装はサブ関数に分割されているため、実際のメモリ使用量に関する情報を収集するのに問題があります。

これは私がこれまでに試したことです:

  1. プロファイラーを使用して、すべての関数のメモリ使用量をチェックしました。問題:割り当てられたメモリ使用量のみが表示されます。たとえば、すべての関数の変数のメモリ使用量は表示されません。

  2. すべての関数の最後でwhosを使用して、関数のワークスペース内のすべての変数に関する情報を収集しました。次に、これらをグローバル変数に追加しました。問題:実行が完了した後もグローバル変数が増加し続け、停止しないようです。

さて、私の質問です。かなり簡単な方法で、すべての関数を含むプログラムのメモリ使用量に関する情報を取得するにはどうすればよいですか?

よろしくお願いします

4

3 に答える 3

2

whosすべての関数の最後(関数が戻る直前)に呼び出す戦略は良いものだと思います。ただし、グローバルではなく、結果を画面に出力したい場合があります。それが「増加し続ける」場合は、知らないうちに呼び出されているコールバック関数があり、そのwhos呼び出しの1つが含まれている可能性があります。画面に印刷することで(そしておそらくそのdisp('**** memory usage at the end of <function name> ***')直前を含めることで、なぜそれが「継続する」のかがわかります。

使用する代わりの方法memoryは多少役立ちますが、「使用可能な」メモリと、Matlabで使用されるすべてのメモリ(変数だけでなく)に関する情報が得られます。

もちろん、メモリ使用量のスナップショットは必ずしもピークをつかむわけではありません-次のようなステートメントが

x = sum(repmat(A, [1000 1]));

would require quite a large peak memory usage (as you replicate the matrix A 1000 times), yet a snapshot of memory (or running whos) right before or after won't tell you what just happened...

于 2013-03-12T22:07:52.783 に答える
1

The best way to monitor memory usage is to use the profiler, with the memory option turned on:

profile -memory on % run your code profreport

The profiler returns memory usage and function calls statistics. Note that the memory option has an impact on your execution speed.

于 2015-09-17T02:35:42.293 に答える
0

メモリー機能が使えます。また、メモリ管理機能も参照してください。matlabのメモリ使用量を見てください。

于 2013-03-12T21:58:14.403 に答える