D vs C++ - Where are the benchmarks?

Paulo Pinto pjmlp at progtools.org
Sun Jun 30 23:51:33 PDT 2013


On Monday, 1 July 2013 at 04:50:29 UTC, Jonathan M Davis wrote:
> On Monday, July 01, 2013 06:27:15 Marco Leise wrote:
>> Am Sun, 30 Jun 2013 22:55:26 +0200
>> 
>> schrieb "Gabi" <galim120 at bezeqint.net>:
>> > I wonder why is that.. Why would deleting 1 million objects 
>> > in
>> > C++ (using std::shared_ptr for example) have to be slower 
>> > than
>> > the garbage collection freeing a big chunk of million 
>> > objects all
>> > at once.
>> 
>> I have no numbers, but I think especially when you have 
>> complex graph
>> structures linked with pointers, the GC needs a while to 
>> follow all
>> the links and mark the referenced objects as still in use. And 
>> this
>> will be done every now and then when you allocate N new 
>> objects.
>
> The other thing to consider is that when the GC runs, it has to 
> figure out
> whether anything needs to be collected. And regardless of 
> whether anything
> actually needs to be collected, it has to go through all of the 
> various
> references to mark them and then to sweep them. With 
> deterministic
> destruction, you don't have to do that. If you have a fairly 
> small number of
> heap allocations in your program, it's generally not a big 
> deal. But if you're
> constantly allocating and deallocating small objects, then the 
> GC is going to
> be run a lot more frequently, and it'll have a lot more objects 
> to have to
> examine. So, having lots of small objects which are frequently 
> being created
> and destroyed is pretty much guaranteed to tank your 
> performance if they're
> being allocated by the GC. You really want reference counting 
> for those sorts
> of situations.

This is only true in the current D GC's situation.

Modern parallel compacting GCs don't suffer from this.

--
Paulo



More information about the Digitalmars-d mailing list