1

メモリリークに関連するクエリがあります。

32ビットのLinuxベースのシステムは、複数のアクティブなプロセスA、B、C、Dを実行しています。すべてのプロセスは、ヒープからメモリを割り当て/割り当て解除しています。プロセスAが継続的に大量のメモリをリークしている場合、一定の時間が経過した後、プロセスBがヒープから割り当てるメモリを見つけることができない可能性がありますか?

私の理解によると、各プロセスには、OSから2GBの一意のVMが提供されます。ただし、VMと物理メモリの間にはマップピッグがあります。

4

2 に答える 2

2

はい、VMの合計量(RAM +スワップスペース)がプロセスAによって使い果たされたmalloc場合、他のプロセスのいずれかでそのために失敗する可能性があります。Linuxは、プロセスのメモリスペースを他のプロセスから隠しますが、マシンに魔法のように余分なメモリを作成することはありません。(オーバーコミット動作のためにそうなるように見えるかもしれませんが。)

さらに、Linuxは、メモリが不足しているときにOOMキラーを使用する場合があります。

于 2012-06-05T12:01:07.423 に答える
0

Linux カーネルはデフォルトでメモリーのオーバーコミットを行います。プロセスが malloc() でメモリ セグメントを要求すると、メモリは自動的に割り当てられません。それぞれ 2 GB を malloc() する 4 つのプロセスがあり、問題がない場合があります。この問題は、プロセスが malloc() されたメモリを使用 (初期化、bzero、コピー) するときに発生します。問題なく、システムが予約するよりも多くのメモリを malloc することもできますが、malloc() は NULL を返しません!!

于 2012-06-05T12:09:46.630 に答える