実行中にメモリを割り当てたが、呼び出さdelete
ずにプログラムが終了した場合はどうなりますか?OSは割り当てたすべてのメモリを解放し、メモリは「無駄になりません」か?または、コンピュータを再起動するまでメモリの一部が失われますか?
明らかに、私は良いコーディング慣行があなたが必要としないものを削除することを確実にすることであることを知っているので、私は単に「のポイントは何ですか」と尋ねているのではありませんdelete
。RAM内で何が起こっているのかを知りたいだけです。
実行中にメモリを割り当てたが、呼び出さdelete
ずにプログラムが終了した場合はどうなりますか?OSは割り当てたすべてのメモリを解放し、メモリは「無駄になりません」か?または、コンピュータを再起動するまでメモリの一部が失われますか?
明らかに、私は良いコーディング慣行があなたが必要としないものを削除することを確実にすることであることを知っているので、私は単に「のポイントは何ですか」と尋ねているのではありませんdelete
。RAM内で何が起こっているのかを知りたいだけです。
概念的には、メモリをリークします。
ただし、実際には、正常なOSを使用している場合は、プロセス後にクリーンアップされる可能性があります。しかし、実際にはそれに依存しないでください。
それはすべて、プログラムが何をするか、そしてそれが使用するメモリの量に依存します-いつでも、そしてその実行時を通して全体的に。
たとえば、受信する各電子メールを保持するためのメモリを割り当てるメールサーバーを作成するとします。ただし、実際に通過するすべての電子メールを保存する必要はありません。したがって、電子メールの受信と転送を数日行った後、メールサーバーはそれ以上メモリを割り当てることができず、使用可能なすべてのメモリを消費しましたが、電子メールが使用されなくなったため、実際にはそのメモリで何の役にも立ちません。 -それらは取り扱われました。
一方、たとえば1 MBのバッファを割り当ててメールを読み込んで処理するメールサーバープログラムを作成し、それが完了すると、メモリは別のメールに再利用されるため、解放してもほとんど意味がありません。その記憶、これまで。
そして、ファイルを読み取り、ファイル全体をメモリにロードし、統計目的ですべての文字をカウントしたときに、大量のメモリを割り当てるかどうかに関係なく、統計を出力して終了するプログラムを作成する場合、実際にはそうではありません。案件。
もちろん、これはすべて、new
メモリを割り当てるための呼び出しが単純であることを前提としています。オブジェクトのコンストラクタが、ファイルを開く、ロックを取得するなど、より複雑なことを行う場合、デストラクタが呼び出されないと、あらゆる種類の悪いことがすぐに発生する可能性があります。
OSは(Linux、macOS、iOS、その他のUnixシステム、Windows、DOS、OS / 2などの一般的に使用されるOSの場合)、アプリケーションで使用されているメモリを解放します。
オペレーティングシステムは、プロセスが終了すると、プロセスに割り当てられたすべてのメモリを解放します。したがって、プログラムによって割り当てられたメモリは、プログラムが終了すると、オペレーティングシステムによって解放されて再利用されます。