From ernest.turro at ic.ac.uk  Sun Feb 25 18:37:24 2007
From: ernest.turro at ic.ac.uk (Ernest Turro)
Date: Sun, 25 Feb 2007 17:37:24 +0000
Subject: [Rd] R/C++/memory leaks
Message-ID: <39CFDB8F-918C-48FB-9A6D-D8055D828C13@ic.ac.uk>

Dear all,

I have wrapped a C++ function in an R package. I allocate/deallocate  
memory using C++ 'new' and 'delete'. In order to allow user  
interrupts without memory leaks I've moved all the delete statements  
required after an interrupt to a separate C++ function freeMemory(),  
which is called using on.exit() just before the .C() call.

I am concerned about the following. In square brackets you see R's  
total virtual memory use (VIRT in `top`):

1) Load library and data [178MB] (if I run gc(), then [122MB])
2) Just before .C [223MB]
3) Just before freeing memory [325MB]
4) Just after freeing memory [288MB]
5) After running gc() [230MB]

So although the freeMemory function works (frees 37MB), R ends up  
using 100MB more after the function call than before it. ls() only  
returns the data object so no new objects have been added to the  
workspace.

Do any of you have any idea what could be eating this memory?

Many thanks,

Ernest

PS: it is not practical to use R_alloc et al because C++ allocation/ 
deallocation involves constructors/destructors and because the C++  
code is also compiled into a standalone binary (I would rather avoid  
maintaining two separate versions).



[Rd] R/C++/memory leaks
Ernest Turro