How to free memory of an associative array
Jonathan M Davis via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jun 24 12:21:36 PDT 2014
> Sent: Tuesday, June 24, 2014 at 11:12 AM
> From: "Mark Isaacson via Digitalmars-d-learn" <digitalmars-d-learn at puremagic.com>
> To: digitalmars-d-learn at puremagic.com
> Subject: How to free memory of an associative array
>
> How can I free the memory used by an associative array?
>
> I need to be able to reuse the same array, but set it to an empty
> state and free up the memory it used previously.
>
> I do not believe that setting the associative array to null is
> sufficient to free the memory, as it is possible that someone
> still has a reference to an element inside, and so the garbage
> collector must be conservative.
On Tue, 24 Jun 2014 18:12:06 +0000
Mark Isaacson via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
wrote:
> How can I free the memory used by an associative array?
>
> I need to be able to reuse the same array, but set it to an empty
> state and free up the memory it used previously.
>
> I do not believe that setting the associative array to null is
> sufficient to free the memory, as it is possible that someone
> still has a reference to an element inside, and so the garbage
> collector must be conservative.
Well, if something still has references to its internals, freeing the memory
would be a bug in your program. Also, manually freeing GC memory is pretty
much always a bad idea. If you really want to do that, use malloc and free
(though that would require writing your own AA implementation - the built-in
one is designed to manage itself and is not particularly tweakable).
Regardless, the memory of the AA is managed entirely by the GC, and I don't
believe that there is any way that you can force it to be freed. The best that
you can do is make sure that no references to the AA currently exist and then
explicitly run a collection.
http://dlang.org/phobos/core_memory.html#.GC.collect
Regardless, if you want to be managing memory, I'd strongly suggest that you
not do it with GC-allocated memory. It's just begging for trouble. If you want
to use the GC, let it do its job. Anything along the lines of forcibly freeing
GC memory will be incredibly bug-prone.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list