2009-06-14 8 views
5

可能性の重複:
What REALLY happens when you don’t free after malloc?メモリを解放することの重要性?

C/C++でプログラムを終了する場合、あなたはポインタを解放することにより、クリーンアップする必要があります。あなたがintへのポインタを持っていて、プログラムを終了するときにそれを削除しない場合のように、メモリを解放しないとどうなりますか?メモリは引き続き使用され、再起動によってのみ解放されるか、プログラムが終了すると自動的に解放されますか?そして最後のケースでは、なぜオペレーティングシステムがあなたのためにそれを行うなら、それを解放するのですか?

+1

重複:http://stackoverflow.com/questions/654754/what-really-happens-when-you-dont-free-after-malloc –

+1

重複:http://stackoverflow.com/questions/ 347338/is-object-release-on-program-exit-really-needed/347349 – Tom

答えて

5

プログラムが終了すると、すべてのメモリがオペレーティングシステムによって解放されます。

あなた自身を解放する必要がある理由は、実行中のプログラム内のメモリが有限のリソースであるためです。確かに、非常に短時間で実行されるシンプルなプログラムでは、メモリを解放しても目立たない効果はありません。しかし、長時間実行されているプログラムでは、メモリを解放しないと、補充することなく有限のリソースを消費することになります。最終的にそれは使い果たし、あなたのプログラムは突発的にクラッシュします。このため、メモリを解放する必要があります。

+1

非常にうまくいきます。使用していないメモリを解放することの重要性(そして、もちろん、不要なメモリ割り当てを解放する方法で実装すること)は、長時間実行するプログラムでは非常に重要です。短期間の在宅勤務の仕事を書いている場合、その重要性は学問的関心事です。しかし、大きなアプリケーションを書く場合(firefoxのように - 私は引数を知っています、炎はしないでください)、新しいメモリチャンクを割り当て続け、古い未使用のものを解放しないと、メモリが足りなくなるか、アプリケーションがあまりにも多くのリソースを割り当てるために投げ捨てられます。 – nik

7

プログラムが終了すると、すべてのメモリ(解放されているかどうか)はオペレーティングシステムによって再要求されます。あなたが割り当てるすべてのものを解放することは、良い習慣ですが、主にそれを習慣にすること、あるいはあなたのプログラムを拡張して、以前の場所で終わらないようにすることができます。

+1

これは正しいです。あなたのプログラムがスケーラブルであるためには、できるだけ早くすべてを解放する必要があります。これはプログラムの最後にあることもありますが、通常はそうではありません。 –

5

Windows、Linux、MacOSなどのデスクトップOSでは、メモリがクリーンアップされます。

一部のリアルタイムまたは組み込みオペレーティングシステムでは、クリーンアップされません。

しかし、プログラムを終了した時点では常にメモリを解放することをお勧めします。プログラムが実行されている間は、そのメモリはすべて使用中です。それを解放しないと、マシンのメモリー使用量が増加します。

リファクタリングにも注意が必要です。つまり、メモリを割り当てるmain()関数の作成を開始し、OSが自動的に行うため、解放するのは面倒ではありません。しかし、そのコードを長時間に渡って何度も呼び出される関数に移動すると、突然大きなメモリリークが発生します。

1

メモリはプログラム終了時にOSによって解放されますが、あなたが持っているのはマイナーなメモリリークであれば、あなたの心配はほとんどありません。

問題が発生するのは、1)ループ内で発生した場合はプログラムのサイズが大きく、2)C++では「新しい」edオブジェクトが「削除」されていない場合、デストラクタは実行されませんこれははるかに深刻な問題につながる可能性があります(ミューテックスの漏洩、OSでクリーンアップされないリソースの漏洩、データの完全性の問題、リストは続く)

0

役立つツールあなたが問題を追跡する必要があるときに、メモリリークが意味のある出力を持つことがわかります。 OSがメモリを解放できるようにすると、後で使用する解析ツールにノイズが追加されます。 OSがメモリをシステムに戻したとしても、メモリを適切な方法で使用し、ツールを最大限に活用できる頑丈な設計が必要です。

関連する問題