From mtmorgan at fredhutch.org  Wed Nov 12 19:20:33 2014
From: mtmorgan at fredhutch.org (Martin Morgan)
Date: Wed, 12 Nov 2014 10:20:33 -0800
Subject: [Rd] How to maintain memory in R extension
In-Reply-To: <CAFLer80OKhvuH2BRuC3qdTFN-2Kg6MPzh0A24NNBs+JMbO-fvQ@mail.gmail.com>
References: <CAFLer80OKhvuH2BRuC3qdTFN-2Kg6MPzh0A24NNBs+JMbO-fvQ@mail.gmail.com>
Message-ID: <5463A4F1.3090008@fredhutch.org>

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
Martin Morgan