RE: [Rd] How allocate STRSXP outside of gc

From: Vadim Ogranovich <vograno_at_evafunds.com>
Date: Tue 12 Apr 2005 - 20:38:17 GMT


Thanks Duncan!

R_PreserveObject will do. One thought, wouldn't it make sense to modify R_PreserveObject to return its argument? This would allow things like

static SEXP fooSexp = R_PreserveObject(mkChar("foo"));

and would also make R_PreserveObject more similar to Rf_protect().

There should be no problem w/ backward compatability, at least not that I could see.

Thanks,
Vadim

> -----Original Message-----
> From: Duncan Temple Lang [mailto:duncan@wald.ucdavis.edu]
> Sent: Tuesday, April 12, 2005 12:52 PM
> To: Vadim Ogranovich
> Cc: r-devel@stat.math.ethz.ch
> Subject: Re: [Rd] How allocate STRSXP outside of gc
>
> Look at R_PreserveObject to see if it will do what you want.
> It certainly used to.
>
> SEXP getFoo()
> {
> static SEXP val = NULL;
>
> if(!val) {
> val = mkChar("foo");
> R_PreserveObject(val);
> }
>
> return(val);
> }
>
>
> You may want to have a routine that is called when the
> package is unloaded that calls R_ReleaseObject().
>
> Alternatively, store the object in a package's namespace
> environment and it won't be gc'ed.
>
> D.
>
>
> Vadim Ogranovich wrote:
> > Hi,

> >
> > I am trying to figure a way to allocate a string SEXP so that gc()

> > won't ever collect it.
> >
> > Here is a little bit of a background. Suppose I want to write a
> > .Call-callable function that upon each call returns the same value,
> > say
> > mkChar("foo"):
> >
> > SEXP getFoo() {
> > return mkChar("foo");
> > }
> >
> > The above implementation doesn't take advantage of the fact that
> > mkChar("foo") could be pre-computed only once, and then the
> function
> > would return the pre-computed value. So the question is how
> to create
> > this precomputed value.
> >
> >
> > The closest thing I could find in the sources is
> R_NaString, but I was
> > not able to trace down how it comes about.
> >
> >
> > Thanks,
> > Vadim
> >
> >
> > P.S. I was able to solve a similar problem with symbols. If
> I need a
> > symbol "foo", I do
> >
> > static SEXP FooSymbol = install("foo");
> >
> > and then use FooSymbol instead of install("foo")
> >
> >
> >
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> --
> Duncan Temple Lang duncan@wald.ucdavis.edu
> Department of Statistics work: (530) 752-4782
> 371 Kerr Hall fax: (530) 752-7099
> One Shields Ave.
> University of California at Davis
> Davis, CA 95616, USA
>
>
>
>



R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed Apr 13 06:48:13 2005

This archive was generated by hypermail 2.1.8 : Mon 24 Oct 2005 - 22:26:38 GMT