From zhengda1936 at gmail.com  Wed Nov 12 21:54:19 2014
From: zhengda1936 at gmail.com (Zheng Da)
Date: Wed, 12 Nov 2014 15:54:19 -0500
Subject: [Rd] How to maintain memory in R extension
In-Reply-To: <5463A4F1.3090008@fredhutch.org>
References: <CAFLer80OKhvuH2BRuC3qdTFN-2Kg6MPzh0A24NNBs+JMbO-fvQ@mail.gmail.com>
	<5463A4F1.3090008@fredhutch.org>
Message-ID: <CAFLer82eg+4ibjLmhuVhe0BMe4_A+LhB10rJRYzzf7ABQYxW3g@mail.gmail.com>

Thank you, Gabor and Martin. It helps a lot.

Da

On Wed, Nov 12, 2014 at 1:20 PM, Martin Morgan <mtmorgan at fredhutch.org> wrote:
> On 11/12/2014 05:36 AM, Zheng Da wrote:
>>
>> Hello,
>>
>> I wrote a system to perform data analysis in C++. Now I am integrating
>> it to R. I need to allocate memory for my own C++ data structures,
>> which can't be represented by any R data structures. I create a global
>> hashtable to keep a reference to the C++ data structures. Whenever I
>> allocate one, I register it in the hashtable and return its key to the
>> R code. So later on, the R code can access the C++ data structures
>> with their keys.
>>
>> The problem is how to perform garbage collection on the C++ data
>> structures. Once an R object that contains the key is garbage
>> collected, the R code can no longer access the corresponding C++ data
>> structure, so I need to deallocate it. Is there any way that the C++
>> code can get notification when an R object gets garbage collected? If
>> not, what is the usual way to manage memory in R extensions?
>
>
> register a finalizer that runs when there are no longer references to the R
> object, see ?reg.finalizer or the interface to R and C finalizers in
> Rinternals.h. If you return more than one reference to a key, then of course
> you'll have to manage these in your own C++ code.
>
> Martin Morgan
>
>
>>
>> Thanks,
>> Da
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>
> --
> Computational Biology / Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N.
> PO Box 19024 Seattle, WA 98109
>
> Location: Arnold Building M1 B861
> Phone: (206) 667-2793



[Rd] How to maintain memory in R extension
Zheng Da