-----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
would return the pre-computed value. So the question is how
this precomputed value.
The closest thing I could find in the sources is
not able to trace down how it comes about.
Thanks,
Vadim
P.S. I was able to solve a similar problem with symbols. If
symbol "foo", I do
static SEXP FooSymbol = install("foo");
and then use FooSymbol instead of install("foo")
[[alternative HTML version deleted]]