[Mono-list] Checking memory leak

Andreas Ericsson ae at op5.se
Thu Apr 23 04:11:09 EDT 2009


Ishwor Gurung wrote:
> Hi list,
> 
> Whats an appropriate way to check for memory leak of a mono application?
> 
> I googled around with some example using valgrind for mono app but
> couldn't find any concrete examples. What I've essentially done so far
> using valgrind is:
> $ valgrind --tool=memcheck --leak-check=full --show-reachable=yes mono
> ./ConnectUTest.exe
> 
> This however, always produces memory leak (~14k/test on five runs so far):
> 
> ==15141== LEAK SUMMARY:
> ==15141==    definitely lost: 14,408 bytes in 760 blocks.
> ==15141==    indirectly lost: 2,496 bytes in 126 blocks.
> ==15141==      possibly lost: 12,460 bytes in 419 blocks.
> ==15141==    still reachable: 2,569,056 bytes in 16,726 blocks.
> ==15141==         suppressed: 0 bytes in 0 blocks.
> 
> 
> Is this something I should worry about in itself or let the Mono's GC
> do its job with the memory and not worry about memory leaks? Can
> someone confirm if these are even a real memory leak (the one above
> with 14,408 bytes gone!)?
> 

If valgrind reports it as a leak, then it is a leak, but only in the
sense that no reference points *exactly* to the leaked area.

For example, consider this code (in C, sorry. I don't know how to
produce a leak in C#):

--%<--%<--
static unsigned long offset;
static char *buf;

void some_func(void)
{
	buf = malloc(5000);
	offset = 4500;
	buf += offset;
}
--%<--%<--

but that's not entirely true, because the exact reference to *buf
can be determined by

	exact_ref = buf - offset;

Granted, this is a pretty weird way of using offsets, but it's a
valid one that can be done without leaking memory. I've sometimes
used it myself to microoptimize tight loops, but only on static
sized data where the offset is always

	exact_ref = buf - STATIC_SIZE;

In short; Valgrind sometimes gives false positives. So long as
the leaked memory is small-ish (14K is nothing) and doesn't
grow over time, I wouldn't worry about it.

-- 
Andreas Ericsson                   andreas.ericsson at op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

Considering the successes of the wars on alcohol, poverty, drugs and
terror, I think we should give some serious thought to declaring war
on peace.


More information about the Mono-list mailing list