View source code
Display the source code in std/experimental/allocator/building_blocks/free_list.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Struct std.experimental.allocator.building_blocks.free_list.FreeList

Free list allocator, stackable on top of another allocator. Allocation requests between min and max bytes are rounded up to max and served from a singly-linked list of buffers deallocated in the past. All other allocations are directed to ParentAllocator. Due to the simplicity of free list management, allocations from the free list are fast. If adaptive is set to Yes.adaptive, the free list gradually reduces its size if allocations tend to use the parent allocator much more than the lists' available nodes.

struct FreeList(ParentAllocator, ulong minSize, ulong maxSize = minSize, Flag!("adaptive") adaptive = No.adaptive) ;

One instantiation is of particular interest: FreeList!(0, unbounded) puts every deallocation in the freelist, and subsequently serves any allocation from the freelist (if not empty). There is no checking of size matching, which would be incorrect for a freestanding allocator but is both correct and fast when an owning allocator on top of the free list allocator (such as Segregator) is already in charge of handling size checking.

The following methods are defined if ParentAllocator defines them, and forward to it: expand, owns, reallocate.

Fields

NameTypeDescription
parent ParentAllocatorThe parent allocator. Depending on whether ParentAllocator holds state or not, this is a member variable or an alias for ParentAllocator.instance.

Properties

NameTypeDescription
max[get] size_tReturns the largest allocation size eligible for allocation from the freelist. (If maxSize != chooseAtRuntime, this is simply an alias for maxSize.) All allocation requests for sizes greater than or equal to min and less than or equal to max are rounded to max and forwarded to the parent allocator. When the block fitting the same constraint gets deallocated, it is put in the freelist with the allocated size assumed to be max.
max[set] size_tIf FreeList has been instantiated with maxSize == chooseAtRuntime, then the max property is writable. Setting it must precede any allocation.
min[get] size_tReturns the smallest allocation size eligible for allocation from the freelist. (If minSize != chooseAtRuntime, this is simply an alias for minSize.)
min[set] size_tIf FreeList has been instantiated with minSize == chooseAtRuntime, then the min property is writable. Setting it must precede any allocation.

Methods

NameDescription
allocate Allocates memory either off of the free list or from the parent allocator. If n is within [min, max] or if the free list is unchecked (minSize == 0 && maxSize == size_t.max), then the free list is consulted first. If not empty (hit), the block at the front of the free list is removed from the list and returned. Otherwise (miss), a new block of max bytes is allocated, truncated to n bytes, and returned.
deallocate If block.length is within [min, max] or if the free list is unchecked (minSize == 0 && maxSize == size_t.max), then inserts the block at the front of the free list. For all others, forwards to parent.deallocate if Parent.deallocate is defined.
deallocateAll Defined only if ParentAllocator defines deallocateAll. If so, forwards to it and resets the freelist.
goodAllocSize If maxSize == unbounded, returns parent.goodAllocSize(bytes). Otherwise, returns max for sizes in the interval [min, max], and parent.goodAllocSize(bytes) otherwise.
minimize Nonstandard function that minimizes the memory usage of the freelist by freeing each element in turn. Defined only if ParentAllocator defines deallocate. FreeList!(0, unbounded) does not have this function.

Aliases

NameDescription
alignment Alignment offered.

Authors

License