[Rd] memory allocation questions

From: <Mark.Bravington_at_csiro.au>
Date: Tue 14 Sep 2004 - 09:38:55 EST

Dear R-devel

This one seems a bit arcane for R-help. I very often use R to call routines written in Delphi (son of Pascal), doing "persistent" memory allocation within Delphi. That is, I start R and load the Delphi DLL; then I use .C to call a Delphi routine which allocates a piece of memory X and returns to R a pointer to X; then I do some more stuff in R; then I call another Delphi routine, passing it the pointer to X. Finally, I call another Delphi routine from R to free the memory at X.

For years, I've used Delphi's own memory manager for this (the basic one, not SHAREMEM.DLL), but recently I've been wondering whether it would be better to use R's wrappers for "alloc" etc. instead. The Delphi routines seem generally to work fine, but my nagging concern [based on ignorance] is whether R's memory manager will somehow not realize that Delphi has already allocated the memory, and will overwrite it inadvertently. It's fairly easy to replace Delphi's manager with the R routines, following the instructions in section 5.1.2 of R-EXTS and the Delphi manual. So my first question is:

should I bother using the R routines instead?

My second question is:

if I do use the R replacements, what are their names nowadays?

R-EXTS refers to Calloc, Realloc and Free, but these aren't exported by R.DLL (for R1.9.0 or 1.9.1) and I couldn't find mention of any name change in the NEWS file. Running

dumpbin /exports R.dll | find /i "alloc"

suggests either "memalloc/memrealloc/memfree" or "Rm_alloc..." (or "R_chk_alloc..."). I gather that the S_alloc family is intended for temporary allocations that are cleared at the end of the the .C call.

Any insights appreciated. FWIW I use Windows 2000 and Delphi 6.


Mark Bravington
PO Box 1538
Castray Esplanade
TAS 7001 phone (61) 3 6232 5118
fax (61) 3 6232 5012

R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Sep 14 09:42:44 2004

This archive was generated by hypermail 2.1.8 : Fri 18 Mar 2005 - 09:00:17 EST