Garbage Collector?
Mike Parker via Digitalmars-d
digitalmars-d at puremagic.com
Fri Apr 28 00:59:37 PDT 2017
On Friday, 28 April 2017 at 07:35:00 UTC, Ben wrote:
>> so I'll reply:
>> Expanding the continuous memory region a dynamic array
>> consists of (possibly moving it) once it overflows has
>> absolutely nothing to do with the GC, or even the language,
>> it's how the abstract data type "dynamic array" is defined. D
>> just does this transparently for you by default. If you
>> already know the exact or maximum size, you can allocate
>> *once* (not 6 times) using `new` and `.reserve` respectively
>> *before* entering the loop, like that article explains in
>> depth.
>
> You seem to be missing the fact that i pointed this out. The
> fact that the GC might have done up to 6 collection rounds in
> that loop is "ludicrous".
How is it ludicrous? The fact that you know the GC will only run
during an allocation, and only if it needs to, allows you to
control when those opportunities to collect arise. That's a much
more palatable situation than if it were sitting in the
background, constantly checking if it needs to collect, then
doing so without any input from you. There, you'd have no control
at all.
In the context of an actual program, the example would only have
made 6 collections if you were putting putting heavy pressure on
the GC heap, which is an extremely naive way of programming for
anyone concerned about performance. D allows you several options
to relieve that pressure and assert some control over when the GC
can run. Even in a non-GC language, you wouldn't be allocating
like that in a performance-critical loop -- you would preallocate
before you entered the loop.
More information about the Digitalmars-d
mailing list