[Rd] Calling R_PreserveObject from embedded R
Martin Rubi
mrubi at fibertel.com.ar
Fri Feb 22 18:44:53 CET 2008
Hello. This is my first post to the list, so first I'd like to thank
everybody for making and mantaining such a great product as R.
I'm writting a native binding to R from Dolphin Smalltalk. I've followed up
the examples of the documentation showing how to run R embedded, and I got
it partially working. However, I have a problem with the reference handling
of the R objects.
I've followed this strategy: every time I call a function in R and it
answers me a SEXP, I called R_PreserveObject(sexp), and wrap it with a
Smalltalk object. Whenever the Smalltalk object dies, I release the R object
by calling R_ReleaseObject(sexp).
This seems to handle well the life cycle, but makes the running process to
use a growing and a never ending amount of memory. Actually, after
experimenting a while, I isolated the problem to iterate over a loop which
all it does is create an expresion for a number, call PreserveObject and
call ReleaseObject, and that alone makes the memory to grow indefinitely.
I couldn't find any comment about this behaviour. Is there something I'm
missing ?
I'm running the embedded R-2.6.2 binaries for Windows in a WindowsXP sp2
environment.
I've also implemented another strategy, which keeps a global list in R, and
instead of calling R_PreserveObject, it inserts the SEXP in the list. This
made the memory usage problem to go away, but the performance is noticeably
worst compared with the other strategy, and is not as elegant as the first
one neither, so I was hoping to be able to use the first strategy.
I'll appreciate any comment about what might be going on.
Thanks in advance.
Best regards.
martin
More information about the R-devel
mailing list