知らないうちにプログラムした場合、メモリリークが発生してアプリケーションが終了すると、リークしたメモリは解放されますか?
知らないうちにプログラムした場合、メモリリークが発生してアプリケーションが終了すると、リークしたメモリは解放されますか?
回答:
はい。「メモリリーク」とは、プロセスが参照しなくなったため解放できなくなったメモリのことです。OSは、プロセスに割り当てられたすべてのメモリを引き続き追跡し、そのプロセスが終了すると解放します。
ほとんどの場合、OSはメモリを解放します。Windows、Linux、Solarisなどの通常の「フレーバー」の場合と同様です。ただし、さまざまなリアルタイムオペレーティングシステムなどの特殊な環境では、プログラムの終了時にメモリが解放されない場合があります。
プログラムを実行しているOSは、通常、明示的に解放されていないメモリと明示的に閉じられていないハンドルをクリーンアップしますが、これはC ++標準では保証されていません。あなたはあなたのメモリリークを解放しないいくつかの組み込みデバイスを見つけるかもしれません。
そうは言っても、私が今まで見たWindowsとLinuxのすべてのディストリビューションは、メモリリークを解放します。
自分でテストしてみても、メモリリークの巨大なループを簡単に作成できます。RAMの使用量が増加するのを確認してから、プログラムを閉じます。RAMの使用量が減少していることがわかります。
C ++を使用する際のもう1つの考慮事項は、ヒープに割り当てられたメモリを削除しない場合、デストラクタも呼び出されないことです。デストラクタが呼び出されない場合は、他の副作用も発生することがあります。
リークしたメモリによって異なります。一部のメモリはOSによって解放できません。ただし、ほとんどのOSのほとんどのメモリは、プロセスが終了すると自動的に再利用されます。