[Rd] optim/vmmin and R_alloc
Thomas Lumley
tlumley at u.washington.edu
Thu Dec 30 23:28:49 CET 2004
On Thu, 30 Dec 2004, [iso-8859-1] Göran Broström wrote:
> On Thu, Dec 30, 2004 at 08:01:41AM -0800, Thomas Lumley wrote:
>> On Thu, 30 Dec 2004, [iso-8859-1] Göran Broström wrote:
>>>
>>> However, and that is my question/suggestion: Why not use Calloc+Free
>>> instead of R_alloc in vmmin (and maybe in other places)? I made the
>>> changes in 'optim.c' in the functions 'vmmin' and 'Lmatrix'. Then I rebuilt
>>> and reinstalled R-2.0.1. The result was great! My function ran very fast
>>> and
>>> without any memory problems.
>>>
>>> So why not? Or will this change create other problems?
>>
>> Memory will leak permanently if the functions are interrupted or an error
>> occurs.
>
> Not necessarily. If you take a closer look at TFM (as I just did), you find
> in Section 5.1.2:
>
> Users should arrange to Free this memory when no longer needed, including
> on error or user interrupt. This can often be done most conveniently from
> an on.exit action in the calling R function -- see pwilcox for an
> example.
Yes, this could be done. It would require a second C call (vmfree, say)
that freed the memory, and would require all uses of vmmin to have an
on.exit() action that called this vmfree. Using R_alloc means that nearly
everyone doesn't have to worry about this, and a few unfortunate people
have to become experts.
pwilcox has to use Calloc/Free because it is also part of the stand-alone
math library, which won't have access to the R heap when it is used in
other applications.
-thomas
More information about the R-devel
mailing list