2011-07-18 9 views
1

この質問は純粋に理論的なものです。Linuxにメモリリークがありますか?

のLinuxソースコードにはメモリリークがあり、どのようにデバッグしたのか、それはLinuxであることを考慮して、各プログラムのメモリを処理しているのでしょうか?

明らかに、Cで書かれたLinuxは、mallocfreeを処理しなければならないことは明らかです。私が理解していないのは、オペレーティングシステムのメモリリークを測定する方法です。

この質問はLinux固有ではありません。 WindowsおよびMacOS X(darwin)の対応する問題も解決します。

+2

恐らく、はい、どこかでメモリリークがあります。 1つのメモリリークがなくても(たとえあなたが世界最高のCプログラマであっても)多くのコードを書くことは不可能に近づいています。彼らがどのようにそれをデバッグするかについては、idk。 –

+2

すべてのコードにバグがあります。これらのバグの一部はメモリリークを引き起こします。これにはOSコードが含まれます。しかし、OSはリブートせずに数日/週/月間実行する必要があるため、これらのバグはマイナーレベルまで最小限に抑えられます。 –

+0

すべてのコードにバグがあります...私のものではありません!決して!少なくとも私は何も見つけられておらず、ユーザーの誰も報告していません。 – JonH

答えて

3

非常に頻繁に非主流のドライバであり、ステージングツリーにはメモリリークがあります。 LKMLに従うと、SKBのリストを扱うコーナーケースのネットワーキングコードで間違いが修正されることがあります。カーネル最も仕事の性質上

は、コードレビューとリファクタリングですが、仕事はより多くのツールを作るために進行中である:

あなたはユーザーモードLinuxのようなフレームワークを使用して、使用することができ、特定の場合には

http://www.linuxfoundation.org/en/Google_Summer_of_Code#kmemtrace_-_Kernel_Memory_Profiler

実行中のコードにピアしようとするとValgrindのような従来のツール:

http://user-mode-linux.sourceforge.net/

1

mallocとfree(実際にはbrk/sbrk、mallocとfreeはlibcのプロセス内で実装されているため)は、魔法や特別なものではなく、単に他のものと同様のコードであり、マッピングを記述する。

正しい動作をテストしたい場合、1つの方法は、すべてのメモリを正しく解放することが分かっているテストプログラムをユーザー空間に書き込むことです。アプリケーションを実行してから、デバッガを使用してカーネルモードで内部メモリの割り当て構造をチェックします(または、このチェックをプロセスシャットダウン時にデバッグアサートにする方がよい)。

+0

これは 'malloc'と' free'がうまく動作するかどうかをチェックするはずですが、オペレーティングシステムのコードはどうですか? –

+0

ここにカーネルデバッガが入ります。 –

1

すべてのソフトウェアは、オペレーティング・システムを含むバグを持っています。これらのバグの一部はメモリリークを引き起こします。

Linuxには、これらの問題を追跡するのに役立つカーネルデバッガがありますが、カーネルデバッガはそれらを追跡する前に存在していることを発見する必要があります。通常、バグが発見され、自由に複製できるようになると、修正するのがずっと簡単になります(相対的に言うと、明らかに、仕事をするには良いコーダーが必要です)。難しい部分は、最初にバグを見つけ、それを示す信頼できるテストケースを作成することです。これは熟練したQAチームが必要な場所です。

私は、この回答の短いバージョンは、良いQAは重要な良いコーディングであると考えています。

関連する問題