Garbage collection in D

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Thu Jun 4 04:08:21 PDT 2009


bearophile wrote:
> Frits van Bommel:
>> LDC actually still does a dynamic allocation there because it doesn't eliminate 
>> dynamic allocations in loops.
> 
> I have compiled the loop in foo() with LDC:
> 
[snip]
>         scope auto item = new AllocationItem(i);
[snip]
> 
> The asm of the core of the loop:
> 
> .LBB2_2:
>     movl    $_D11gc_test2b_d14AllocationItem6__vtblZ, 8(%esp)
>     movl    $0, 12(%esp)
>     movl    %edi, 16(%esp)
>     movl    %ebx, (%esp)
>     call    _d_callfinalizer
>     incl    %edi
>     cmpl    %esi, %edi
>     jne .LBB2_2
> 
> I can see a call to finalizer, but not the allocation?

Sorry, I thought we were talking about the code without 'scope'. Of course the 
class is indeed stack-allocated if you use scope.

(The following:

>> This is unfortunate, but I haven't yet had the time to figure out how to get the 
>> optimization passes to prove the allocation can't be live when reached again. 
>> (If multiple instances of memory allocated at the same allocation site may be 
>> reachable at the same time, it's not safe to use a stack allocation instead of a 
>> heap allocation)

only applies when 'scope' was not used, and the compiler therefore initially 
heap-allocated it)

> The new JavaVM with the option I have shown is clearly able to do such things.
> Can't you take a look at the source code of the JavaVM? :-)
> There's a huge amount of NIH in the open source :-)

I suspect the Java VM uses a different internal representation of the code than 
LLVM does...


More information about the Digitalmars-d-learn mailing list