std.allocator needs your help

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Sep 25 12:16:12 PDT 2013


On 9/25/13 12:03 PM, Peter Alexander wrote:
> On Sunday, 22 September 2013 at 23:49:56 UTC, Andrei Alexandrescu wrote:
>> struct NullAllocator
>> {
>>     enum alignment = real.alignof;
>>     enum size_t available = 0;
>>     ubyte[] allocate(size_t s) shared { return null; }
>>     bool expand(ref ubyte[] b, size_t minDelta, size_t maxDelta) shared
>>     { assert(b is null); return false; }
>>     bool reallocate(ref ubyte[] b, size_t) shared
>>     { assert(b is null); return false; }
>>     void deallocate(ubyte[] b) shared { assert(b is null); }
>>     void collect() shared { }
>>     void deallocateAll() shared { }
>>     static shared NullAllocator it;
>> }
>
> Does the presence of "shared" indicate that all allocators must be
> thread-safe?
>
> Will we be able to define thread-unsafe allocators, designed for use on
> one thread for performance reasons?

Shared is not required. Most allocators I wrote are thread-local. I've 
only put "shared" there for NullAllocator, Mallocator, GCAllocator to 
represent in the type system a simple reality - these allocators offer a 
singleton that multiple threads may use simultaneously.

Andrei



More information about the Digitalmars-d mailing list