StackFront

Allocator that uses stack allocation for up to stackSize bytes and then falls back to Allocator. Defined as:

alias StackFront(size_t stackSize, Allocator) =
    FallbackAllocator!(
        InSituRegion!(stackSize, Allocator.alignment,
            __traits(hasMember, Allocator, "deallocate")
                ? Yes.defineDeallocate
                : No.defineDeallocate),
        Allocator);

Choosing stackSize is as always a compromise. Too small a size exhausts the stack storage after a few allocations, after which there are no gains over the backup allocator. Too large a size increases the stack consumed by the thread and may end up worse off because it explores cold portions of the stack.

version(HasDRuntime)
alias StackFront(size_t stackSize, Allocator = GCAllocator) = FallbackAllocator!(InSituRegion!(stackSize, Allocator.alignment), Allocator)

Examples

StackFront!4096 a;
auto b = a.allocate(4000);
assert(b.length == 4000);
auto c = a.allocate(4000);
assert(c.length == 4000);
a.deallocate(b);
a.deallocate(c);

Meta