struct vs class benchmark (was Re: Give struct the status it deserves)

Bruno Medeiros daiphoenixNO at SPAMlycos.com
Sun Apr 2 07:46:29 PDT 2006


Thomas Kuehne wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Bruno Medeiros schrieb am 2006-04-02:
>> The best 
>> that I could find was by looking at the assembly code, and that in the 
>> class version a _d_newclass function is called instead of _d_new for the 
>> struct version, yet does _d_newclass do more than _d_new other than just 
>> initialize the pointers?
> 
> have a look at: src/phobos/internal/gc/gc.d
> 
> Thomas
> 
> 
> -----BEGIN PGP SIGNATURE-----
> 
> iD8DBQFEL8wo3w+/yD4P9tIRAgSsAJ9pC8xp4D8N5+ykxPueNKw0nmm1OwCgvcs1
> U2k6rgOjvcYbtgYUJwjUKWY=
> =97Mb
> -----END PGP SIGNATURE-----
Hum, after some testing it seems the class overhead is caused primarily 
by the call:
   _gc.setFinalizer(p, &new_finalizer);


The class test with this line runs in 40 seconds.
With just:
   _gc.setFinalizer(p, null);
it runs in 31 seconds.
And finally without the line at all it runs in 19 seconds, which is now 
quite close to the struct version.

Since this class has no destructors (in it self, or in a base class), I 
think setting up a finalization is redundant, unless there is some need 
related to the monitor releasing (dont know about it). In any case there 
is some room for compiler optimization.

-- 
Bruno Medeiros - CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list