2017-03-08 11 views
0

私はC++終了プログラムのメモリリークはいつ問題になりますか?

メモリリークは、通常の手段によって、深刻な、あるいは検出可能ではないかもしれないと言ってwikipedia記事を読みました。最新のオペレーティングシステムの では、アプリケーションが使用する通常のメモリは、アプリケーション終了時に が解放されています。これは、短い時間だけ実行されるプログラム内のメモリ リークが気づかれないかもしれず、まれに深刻なことではないことを意味します。

OSは、終了時に自動的に通常のメモリを解放します。そのため、メモリリークが深刻ではない場合は、プログラム終了時にメモリから漏れたメモリが問題になることはありません。

しかし、「正常な記憶」の場合にのみ言及し、私は心配しました。 誰かが非正常な記憶の意味を説明できますか?

+1

参照している部分の直後の3番目の箇条書きでは、終了時に自動的に解放されない共有メモリについて言及しています。 –

+0

@DaMašek共有メモリとは何ですか?プロセスを通じて共有されるメモリを意味しますか? – Kevin

+0

はい、IPCメカニズムとして使用されます。 –

答えて

1

哲学的な理由はほとんどありません。 サービスに切り替えたり、dllやmultidocをサポートしたりするなど、あなたのプログラムで寿命の概念を後で再設計する必要がある場合は、これに対処する必要があり、追加費用がかかるでしょう。第2に、プログラムがメモリを解放しない場合、他の重要なリソース、サーバー上のファイルロックなどを解放しない可能性があります(純粋な推測ですが、私はあなたのプログラムが何をしているのか分かりません)。

ただし、特殊なハードウェア上のリアルタイムシステムの外部では、プロセスの終了時のメモリ解放が保証されます。それらは非常に異なった振る舞いをすることができます。

0

一般的には、メモリをリークするプログラムは、そのプログラムが実行されている間だけの問題です。それは必要以上に多くのメモリを消費し、使い果たされる可能性があります。しかし、プログラムが終了するとすぐに、OSカーネルはプログラムが割り当てたすべてのメモリを再利用します。したがって、すべて解放され、他の用途にも利用できます。

シャットダウン時に意図的にメモリをリークさせるのは、実際にはかなり一般的な方法です。 を知っている場合は、プログラムがシャットダウンしても、オブジェクトデストラクタは何の影響も及ぼさないため、オブジェクトをリークして終了するときにOSをクリーンアップする方が速くなる場合がありますすべてのデストラクタを実行するよりも。しかしながら;もしあなたが正当な理由があり、本当にあなたがやっていることとあなたがそれをやっている理由を知っている場合にのみそれをしてください。

+0

はい、速度は当初の私の懸念の一つでした。もう1つは分離したスレッドに関するものでした。私はスレッドを切り離さなければならない機会がいくつかありました。私は、終了後に分離されたスレッドのリソースを少し心配していました。それはそれが一般的なトリックであることを聞くことは非常に快適です。 – Kevin

関連する問題