web-dev-qa-db-ja.com

メモリリークを修正することはどのくらい重要ですか?

Valgringによって、一部のGTK +プログラムでメモリリークが発生することがわかりました。これらのリークを修正することはどのくらい重要ですか?つまり、多くの場合、これらのプログラムは非常にうまく機能しますが、一方で、リークしているコードの一部を他のプログラムにコピーする必要があるかどうかは確実ではありません。そして、GTK +プログラムのアイデアが高速に動作することであり、したがってリークがあるかどうかはわかりません。

それで、オープンソースプログラムでメモリリークを見つけることがある場合、それを修正する必要がありますか、それとも、たとえば効率の問題があるため、プログラマの元のアイデアは、いくつかの小さなリークコードを書くことでしたか?

19

メモリリークを修正することの重要性は、問題の重大度と、それ以外に何をしなければならないかによって異なります。私の経験では、ほとんどのアプリケーションでは、小さなメモリリークはどちらかと言えば無害である傾向があります。デスクトップアプリセッションのライフタイムは通常、小さなメモリリークによる劣化を確認するのに十分な長さではありません。

24時間年中無休で稼働するサーバーを作成している場合、小さなメモリリークが時間の経過とともに増加し、大きな問題になる可能性があります。しかし、そのため多くの企業はサーバーを毎日または毎週再起動するようにスケジュールしています。多くの場合、メモリリークを見つけるための労力は、得られる可能性のあるものに比べて過度です。そのため、定期的にサーバーを再起動して、より重要な作業に移る方が簡単です。

6
Mohair

実行時間の短いプログラムの場合、メモリリークはそれほど重要ではありません。 OSは終了時にすべてを再利用しますが、他のリソースが解放されない可能性があります。

短時間の実行は相対的なものですが、漏れは数時間で制御不能になったり、気付かれずに数週間蓄積したりする可能性があります。

私のアドバイスは、リードが気に留めてくれれば修正案を付けてトラッカーにバグを報告することです。

リークの種類も重要です。リークする割り当ては、開発者が意図的にクリーンアップのためにOSに依存した1回限りの割り当てである可能性があります。これらは、valgrindに誤検知を与えます。

36
ratchet freak

FWIW、私が取り組んでいるアプリケーションのリークをユーザーが報告した場合、私はそれを修正する傾向があります(特に、バグレポートに修正用のコードが含まれている場合は!)。とは言え、リークが小さく、他の問題がより緊急の場合(たとえば、頻繁に発生するクラッシュするバグ)は、すぐには発生しない可能性があります。しかし、私は間違いなくそれを感謝し、最終的にそれを修正するように働きます。あなたは間違いなく彼らに知らせるべきです。彼らはそれを高く評価してそれを修正するために作業するか(ほとんどの場合)、または彼らは気にせず、それがあなたにかかるすべての費用はしばらくかかります。

0
user1118321