views:

276

answers:

4

How do memory leak detection tools like purify and valgrind work?

How can I design and implement my own such tool?

+5  A: 

For basic leak detection you just need to hook into low level memory allocation routines, e.g. by patching malloc/free. You then track all allocations and subsequently report any that have not been freed at an appropriate point, e.g. just prior to exit.

Paul R
+4  A: 

Such tools usually instrument the exeutable with their own code. for instance they replace every call to malloc() and free() with their own functions which allows them to follow every allocation.

In Visual Studio this can be done automatically using just the C Runtime Library using functions from the family of _CrtDumpMemoryLeaks()

shoosh
+2  A: 

For actual work, valgrind works quite well. It detects invalid read/write and memory leaks.

For hobby project, you can create your own memory management module which keeps track of various pointer allocation and its usage. If you don't see some mem location being used for long time, it might be a leak.

Jack
A: 

You can look for some BSD implementations of memory management/profiling tools for examples of code. For instance http://code.google.com/p/google-perftools/wiki/GooglePerformanceTools

Mykola