GC finalizer optimization.

Dave Dave_member at pathlink.com
Tue Apr 11 09:19:26 PDT 2006


Comments? Like, how can this break things?

By changing line 129 of phobos/internal/gc/gc.d from:

_gc.setFinalizer(p, &new_finalizer);

to:

///_gc.setFinalizer(p, &new_finalizer);
///
     ClassInfo c = ci;
     do
     {
         if (c.destructor)
         {
             _gc.setFinalizer(p, &new_finalizer);
         }
         c = c.base;
     } while (c);
///

gives me about 3x performance in allocating class objects w/o a dtor 
using the following code.

Before:
D::~this
C::~this
C::~this
0.829

After:
D::~this
C::~this
C::~this
0.258

;---

import std.date, std.stdio;

void main()
{
     C c = new C;
     D d = new D;
     E e;
     F f;

     d_time st = getUTCtime();
     for(int i = 0; i < 1_000_000; i++)
     {
         e = new E;
         f = new F;
     }
     d_time et = getUTCtime();
     writefln((et - st) / cast(double)TicksPerSecond);
}

class C
{
     int i;
     ~this()
     {
         printf("C::~this\n");
     }
}

class D : C
{
     int i;
     ~this()
     {
         printf("D::~this\n");
     }
}

class E
{
     int i;
}

class F : E
{
     int i;
}

Thanks,

- Dave



More information about the Digitalmars-d mailing list