共有メモリ セグメントを切り離さないと、どのような影響がありますか?
さまざまなオペレーティングシステムがこれをどのように処理しますか?
デタッチによって OS の安定性が損なわれることはありませんか?
ありがとう。
共有メモリ セグメントを切り離さないと、どのような影響がありますか?
さまざまなオペレーティングシステムがこれをどのように処理しますか?
デタッチによって OS の安定性が損なわれることはありませんか?
ありがとう。
共有メモリセグメントが切り離されていない場合、カーネルは特定のセグメント (カーネルはそれを領域と呼んでいます) が使用中であると考え続け、削除のマークを付けることはありません - 一種の参照カウントメカニズムが内部で使用されます。別の問題は、プロセスの仮想アドレス空間が不必要に消費されることです。
ただし、このメモリ セグメントはプロセスが終了した瞬間に自動的に切り離されて解放されるため、これをメモリ リークと呼ぶことができるかどうかはわかりません (Java の人は言うでしょうが)。
これにより OS 全体が危険にさらされることはないかもしれませんが、メモリ不足になった場合に大量のメモリを消費している一部のプロセス (Linux OOM killer を参照) をシステムが閉じなければならない場合があります (これも予告なしに)。しかし、これは最悪のケースです。
デタッチしないと、他のユーザーがメモリ セグメントを削除できなくなります。これは、Windows と Linux に当てはまります。したがって、メモリリークが発生します。OS の安定性を損なうことはありませんが、使い終わったらセグメントを切り離して削除したくないのはなぜですか?