On 11/14/2011 01:12 PM, dhi...@sonic.net wrote:
Martin Morgan<mtmor...@fhcrc.org>  wrote:
>  On 11/14/2011 11:47 AM,dhi...@sonic.net  wrote:
>  >  dhi...@sonic.net  wrote:
>  >>  Martin Morgan<mtmor...@fhcrc.org>   wrote:
>  >
>  >  I had done some google searches on this issue, since it seemed like it
>  >  should not be too uncommon, but the only other hit I could come up
>  >  with was a thread from 2006:
>  >
>  >  https://stat.ethz.ch/pipermail/r-devel/2006-November/043446.html
>  >
>  >  In any case, one issue with your suggested workaround is that it
>  >  requires knowing how much additional storage is needed, which may be
>  >  an expensive operation to determine.  I've just tried implementing a
>  >  different approach, which is to define two new functions to either
>  >  disable or enable GC.  The function to disable GC first invokes
>  >  R_gc_full() to shrink the heap as much as possible, then sets a flag.
>  >  Then in R_gc_internal(), I first check that flag, and if it is set, I
>  >  call AdjustHeapSize(size_needed) and exit immediately.
>  I think this is a better approach; mine seriously understated the
>  complexity of figuring out required size.
>  >  These calls could be used to bracket any code section that expects to
>  >  make lots of calls to R's memory allocator.  The down side is that
>  >  this approach requires that all paths out of such a code section
>  >  (including error handling) need to take care to unset the GC-disabled
>  >  flag.  I think I would want to hear from someone on the R team about
>  >  whether they think this is a good idea.
>  >
>  Another place where this comes up is during package load, especially for
>  packages with many S4 instances.
Do you know if this is all happening inside a C function that could
handle disabling and enabling GC?  Or would it require doing this at
the R level?  For testing, I am turning GC on and off at the R level

Generally complicated operations across multiple function calls. Something like

  f = function() {
    state <- gcdisable(TRUE)
    on.exit(gcdisable(state))
    as.character(1:10000000)
  }

might be used.

Martin
--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to