[Rd] Calling R_PreserveObject from embedded R

2008-02-22 Thread Martin Rubi
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

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


Re: [Rd] Calling R_PreserveObject from embedded R

2008-02-25 Thread Martin Rubi
Hi Laurent,
with your comments I was able to find the problem in no time. It was my code 
that was doing something wrong, now it's fixed.
Thank you very much for your response.

best regards
martin
  - Original Message - 
  From: Laurent Gautier 
  To: [EMAIL PROTECTED] 
  Cc: r-devel@r-project.org 
  Sent: Saturday, February 23, 2008 12:07 PM
  Subject: Re: [Rd] Calling R_PreserveObject from embedded R


  >  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 ?

  Martin,

  I am working with code taking a similar approach (from Python), and
  I do not seem to observe what you are experiencing.

  When I initialize the embeded R with the "--verbose" flag, and initialize
  disposable objects from a loop in Python, R outputs lines such as the
  ones below:
  11.8 Mbytes of vectors used (40%)
  Garbage collection 536 = 307+159+70 (level 0) ...
  7.1 Mbytes of cons cells used (38%)
  19.4 Mbytes of vectors used (65%)
  Garbage collection 537 = 307+160+70 (level 1) ...
  7.1 Mbytes of cons cells used (38%)
  11.8 Mbytes of vectors used (40%)

  >  I'm running the embedded R-2.6.2 binaries for Windows in a WindowsXP sp2
  >  environment.

  I am currently working on Linux.

  >  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.

  The first strategy appears is something similar, if I understood it right
  (there is a global SEXP object called R_PreciousList in memory.c).

  >  I'll appreciate any comment about what might be going on.

  May be try  the "--verbose" flag ?

  >  Thanks in advance.
  >
  >  Best regards.
  >  martin
  >

[[alternative HTML version deleted]]

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