Yurii,

On Sep 4, 2009, at 16:54 , Yurii Aulchenko wrote:

Dear All,

I would like to have an advice for designing an R library, and thought that R-devel may be the best place to ask given so many people who are highly expert in R are around.

We are at an early stage of designing an R library, which is effectively an interface to a C++ library providing fast access to large matrices stored on HDD as binary files.

[FWIW there are already several packages that do waht you describe - see e.g. ff, bigMemory, nws, ...]


The core of the C++ library is relatively sophisticated class, which we try to "mirror" using an S4 class in R. Basically when a new object of that class is initiated, the C++ constructor is called and essential elements of the new object are reflected as slots of the R object.

Now as you can imagine the problem is that if the R object is removed using say "rm" command, and not our specifically designed one, the C++ object still hangs around in RAM until R session is terminated.

You must have some link between the S4 object and your C++ object - ideally an external pointer - so all you have to do is to attach a finalizer to it via R_RegisterCFinalizer or R_RegisterCFinalizerEx. In that finalizer you simply free the C++ object and all is well.

Note that R uses a garbage collector so the object won't go away immediately after it went out of scope - only after R thinks it needs to reclaim memory. You can use gc() to force garbage collection to test it.


This is not nice, and also may be a problem, as the C++ object may allocate large part of RAM. We can of cause replace generic "rm" and "delete" functions, but this is definitely not a nice solution.


... and it doesn't tackle the issue - objects can go out of scope by other means than just rm(), e.g.:
f <- function() { ...; myGreatObject }
f()
# the great object is gone now since it was not assigned anywhere


Sounds like rather common problem people may face, but unfortunately I was not able to find a solution.


Cheers,
Simon

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to