GC vs. Manual Memory Management Real World Comparison

Rob T rob at ucora.com
Fri Oct 26 20:11:45 PDT 2012


On Saturday, 27 October 2012 at 01:03:57 UTC, Rob T wrote:
> On Friday, 26 October 2012 at 23:10:48 UTC, bearophile wrote:
>> Rob T:
>>
>>> Is this happening with dmd 2.060 as released?
>>
>> I'm using 2.061alpha git head, but I guess the situation is 
>> the same with dmd 2.060. The code is linked in my post, so 
>> trying it is easy, it's one small module.
>>
>> Bye,
>> bearophile
>
> I tried it with dmd 2.60 (released), and gdc 4.7 branch. I 
> tried to check if memory was being freed by creating a struc 
> destructor for JavaMemoryTrade, but that did not work as 
> expected, leading me down the confusing and inconsistent path 
> of figuring out why destructors do not get called when memory 
> is freed.
>
> Long story short, I could not force a struct to execute its 
> destructor if it was allocated on the heap unless I used 
> delete. I tried destroy and clear, as well as GC.collect and 
> GC.free(), nothing else worked.
>
> Memory heap management as well as struct destructors appear to 
> be seriously broken.
>
> --rt

I made a mistake. The clear and destroy operations require that a 
pointer to a struc be manually dereferenced. What I don't 
understand is why the compiler allows you to pass a -not- 
dereferenced pointer to clear and destroy, this looks like a bug 
to me. It should either work just like a class reference does, or 
it should refuse to compile.

I'm sure you've heard this many times before, but I have to say 
that it's very confusing when struct pointers behave exactly like 
class references, but not always.

--rt




More information about the Digitalmars-d-announce mailing list