Thanks,

That's helpful.  I'm using D 1.0.  I've eliminated all array concats, dups, 
etc. but there's still a significant amount of memory being allocated that I 
can't seem to detect.

Perhaps, I can recompile an instrumented version of phobos...

wade

Jarrett Billingsley Wrote:

> On Tue, Feb 24, 2009 at 12:00 PM, wade Shen <swadena...@gmail.com> wrote:
> > I'm writing some performance sensitive code (real time processing) for 
> > which I've tried to minimize the number of memory allocations by using 
> > preallocated objects pools.  Unfortunately, during the course of running, 
> > it seems that lots of memory is still getting allocated even though all 
> > explicit "new" and array slicing operations have been moved out of the main 
> > processing loops.  As a result the program is quite slow when garbage 
> > collection is enabled (but very fast otherwise).
> 
> Array slicing does not cause the GC to run.  It is essentially free,
> which is a wonderful thing.
> 
> > Is there a way to track down where memory is being allocated if I'm using 
> > phobos? Any recommendations would be appreciated.
> 
> This is something I have *always* wanted.  Unfortunately I don't think
> it's possible to add such instrumentation without modifying and
> recompiling Phobos.  Even if you're using D2, which uses druntime,
> there's no such thing.
> 
> Hm, actually..
> 
> If you *are* using D2, you might be able to replace the GC interface
> with a "debug" interface that just forwards calls to the normal GC.
> This is a capability druntime inherited from the Tango runtime - the
> GC is separated from the rest of the standard library and can actually
> be replaced at link-time.  I don't know if D2 links all three parts of
> druntime into a single library or not, though.
> 
> Here are some other things that could be causing allocation:
> 
> - Array appending (~=) can cause it; array concatenation (~) is
> guaranteed to cause it.
> - Array .dup.
> - Adding items to associative arrays.
> - In D2, nested functions/anonymous delegates can allocate memory
> secretly, unless you're careful and only pass them to "scope" delegate
> parameters.

Reply via email to