D's New GC and Object Allocation Pools
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Sat Oct 25 21:22:28 PDT 2014
On Sunday, 26 October 2014 at 03:37:47 UTC, Maxime
Chevalier-Boisvert wrote:
>
> I also wanted to ask if there was an implementation of an
> object pool in the standard library. If not, I'm wondering what
> the best way to implement this is. Is there any way to overload
> new and destroy?
I'm not an authority on the subject, but I believe all you need
to do is provide alternate implementations for _d_newclass[1] and
destroy[2]. I experimented with this a little bit about a year
ago, and it worked well for me. I modified druntime for my
experiments, but there may be a way to link in your
implementations instead of the defaults at link time, thus giving
you an "override" effect.
>
> I was thinking of using the templated emplace operator from
> std.conv to allocate class objects into a large flat array, and
> to derive pool-allocated classes from a PoolObject base class.
> This base class would contain linked list pointers to implement
> a free list, as well as templated static methods to allocate
> and free the objects. Any advice welcome.
If you haven't already, check out the Memory Management article
on the D Wiki [3]. It's a nice article that was written some
time ago by an unknown author and migrated to the wiki last year
to help keep it maintained. I particularly like Explicit Class
Allocation[4], Mark/Release[5], and Free Lists[6] as alternatives.
Mike
[1] -
https://github.com/D-Programming-Language/druntime/blob/master/src/rt/lifetime.d#L60
[2] -
https://github.com/D-Programming-Language/druntime/blob/master/src/object_.d#L2379
[3] - http://wiki.dlang.org/Memory_Management
[4] -
http://wiki.dlang.org/Memory_Management#Explicit_Class_Instance_Allocation
[5] - http://wiki.dlang.org/Memory_Management#Mark.2FRelease
[6] - http://wiki.dlang.org/Memory_Management#Free_Lists
More information about the Digitalmars-d
mailing list