[Rd] Calloc() & Free() in different .C(.) calls --> not usable ?
   
    Martin Maechler
     
    Martin Maechler <maechler@stat.math.ethz.ch>
       
    Thu, 7 Sep 2000 18:32:59 +0200 (CEST)
    
    
  
       [sending this to R-devel, since it may be of general interest and 
        could possibly lead to better instructions in the "R-exts" manual]
Is this another case where only .Call() or .External() [or a fudge factor]
solve my problem? 
Following situation: 
 I use dyn.loaded C code to compute a recursive tree structure from my data.
 Beforehand I don't know how big the tree will be, but I want the tree
 (as integer array in my case) be passed back to R.
 Current solution [simplified!]:
  
 ## First I fit the tree to my Data, all in C, but only return the *size*
 ## I'll need to store that tree in R
	 size <-      .C("fittree", data, ..., res = integer(1))$res
 ## Now that I know its size, I can get it into R :
	 tree.in.R <- .C("gettree", size, res = integer(size))$res
 where in the C code, I have a
 global 
	static *tree_struct my_tree;
 and in C's fittree(), I use 
	my_tree = Calloc(1, tree_struct); 
 for building the tree, which is 
 then accessed by gettree(), which ends in
	Free(my_tree);
All well, BUT: 
    problem is that memory just builds up and is not freed at all.
>From a (more private) E-mail of Prof Brian Ripley, I read (maybe wrongly?)
that this seems to be ``common'':
    BDR> and the way that most mallocs work is to use sbrk to raise or lower
    BDR> the brk, that is the size of the data space. 
    BDR> They only reduce it when the data space is sufficiently unfragmented. 
	 --------------------------------------------------------------------
which may be my case : "Free(my_tree)" doesn't really free the
memory [according to my tests, looking at Unix' "ps .."].
Solutions (yes, one of them is  ``use .Call() !'') ??
Martin Maechler <maechler@stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._