1

プログラムはC++onX86_64 Linux 2.6.32.12で書かれており、2 つのケースがあり、1 つのケースでは、挿入されたファイルごとに 1 つのファイルが生成され、 を介して送信されUDP(Version A)ます。別のケースではファイルが生成されず、注入されたファイルを直接 経由で送信しますUDP(Version B)

===============VersionA統計グラフ========================== http://i .stack.imgur.com/8bxI5.png http://i.stack.imgur.com/8bxI5.png

================VersionB Statictic Graphic=========================== http:// i.stack.imgur.com/wEnKc.png http://i.stack.imgur.com/wEnKc.png

これら 2 つのケースを使用してvalgrind確認しましたが、レポートは同じで、メモリ リークは見られません。これは、Linux カーネルのメモリ マッピングが原因ですか? テスト マシンには64Gメモリがあります。これmemory leakですか?

更新情報:

では、元のファイルの内容を別のアプリケーションに送信し、処理結果を受け取って必要なファイルを生成するために使用しますVersion AUNIX socket図が示すように、物理メモリが増加します。私は別のケースを試しました.Unixソケットを介してファイルを送信せず、system関数を使用し、別のアプリケーションを呼び出して必要なファイルを生成しました.メモリが増加しないことが示されています. 新しく生成されたファイルは問題ではないようです。Unix ソケットが原因です。私たちはソケットプールを使用し、私は使用lsofします。余分なソケットは開かれていません。Unix socketメモリを占有しますか?

4

2 に答える 2

2

バージョンAはファイルの内容にメモリを割り当てており、メモリマネージャーは解放時にメモリをシステムに返していないと思います(メモリが再利用されることを正しく認識しているため)。

心配は無用です。メモリ不足の場合、カーネルはメモリを再利用します。

于 2012-09-24T08:35:45.343 に答える
0

おそらく、OS に返されるメモリのブロックを停止しているメモリの断片化が発生している可能性があります。

于 2012-09-24T13:39:48.370 に答える