[Rd] R/C++/memory leaks
Ernest Turro
ernest.turro at ic.ac.uk
Sun Feb 25 18:37:24 CET 2007
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).
More information about the R-devel
mailing list