0

長時間実行される数値処理アルゴリズムがメモリを使いすぎないようにしたいと考えています。アルゴリズムは C++ で記述され、OS X で実行されます。大幅に簡略化されたバージョンは次のとおりです。

int main() {
    while (someCondition) {
        // notice nothing is allocated on the heap
        vector<int> v(10, 0);
    }
}

Instruments (割り当てとリーク) を使用してコードをプロファイリングしました。漏れは見当たりません。また、「ライブ バイト」の数は問題ないように見えますが (20 MB 前後で推移)、「全体のバイト」の数は増加し続けています。気になったのは、「全体のカウント」が約 80 GB に達したときに、ハードディスクの空き容量が不足しているという OS X の警告を受け取ったことです (120 GB のソリッド ステート ディスクを使用しています)。私はOSとプロセスの相互作用についてあまり知らないので、私は尋ねたいと思いました:

UNIX ベースの OS で長時間実行されているプロセスによって使用されるメモリは、最初のプロセスが強制終了されるか実行されなくなる前に、他のプロセスで使用できますか?

編集: Instruments: Instruments ObjectAlloc: Explanation of Live Bytes & Overall Bytesの「全体のバイト」数を誤解しているようです。アクティビティモニターでプロセスをチェックアウトすると、「実メモリ」は基本的に一定です。

4

1 に答える 1

1

ディスク容量の警告が表示される理由は、おそらく仮想メモリの割り当てに関連しています。プロセス (または OS) がメモリを要求するたびに、通常は最初にバッキング ストア (スワップ) に「割り当て」られます。

仮想メモリの合計は、使用可能なスワップと RAM のサイズです。私は OSX にアクセスできません。OSX が独自のルールで動作することは知っていますが、スワップの使用状況を表示するコマンドが必要です。

swap -l  (Solaris)
swap -s   (Solaris)
free (linux)

私が思いついた唯一のコマンドはvm_stat, plusですtop - おそらく top が私が話していることに最も近いようです。

于 2013-02-23T01:22:57.563 に答える