2016-10-31 18 views
0

メモリを解放せずにmallocを使用してメモリを連続的に割り当てると、プログラムが終了した後にメモリに何が起こりますか? OSはそれを解放しますか、それともまだ割り当てられていますか?mallocのメモリリーク

+0

オペレーティングシステムによって異なります。いくつかはそれを解放し、他は解放しません。あなたが割り当てたものを常に明示的に解放すること(そして、メモリだけでなく、すべてのリソースも)は、たとえOSがプロセス終了時にすべてのリソースを解放したとしても、一般的には良いアイデアです。 –

+0

すべてのmallocは、プロセスのアドレス空間の一部である仮想メモリ領域の大部分を占めています。実際のマッピングは、メモリにアクセスするまで実行されず、プロセスが終了するとそれらのマッピングが削除されます – user3109672

答えて

0

通常はyesです。長いストーリーは、はい、それが解放された短縮しました。

新しいプロセスを作成すると、OSはその特定のプロセス用にメモリブロックを割り当てています。そのメモリブロックでは、メモリ(関数、シグネチャ、変数など)をほとんどどのように割り当てるかを指定しています。これらのことは、次の図に変換:

Linux memory map with or without shared libraries

プロセスが終了すると、メモリのブロック全体が再利用されます。それがリサイクルされている間に時間がかかることがあります。また、別のプロセスの開始が非常に速く続く場合、別のブロックが使用されます。そうでない場合、これが使用されます。