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.
std.experimental.allocator.building_blocks.affix_allocator
- struct AffixAllocator(Allocator, Prefix, Suffix = void);
- Allocator that adds some extra data before (of type Prefix) and/or after (of type Suffix) any allocation made with its parent allocator. This is useful for uses where additional allocation-related information is needed, such as mutexes, reference counts, or walls for debugging memory corruption errors.If Prefix is not void, Allocator must guarantee an alignment at least as large as Prefix.alignof. Suffixes are slower to get at because of alignment rounding, so prefixes should be preferred. However, small prefixes blunt the alignment so if a large alignment with a small affix is needed, suffixes should be chosen. The following methods are defined if Allocator defines them, and forward to it: deallocateAll, empty, owns.Examples:
import std.experimental.allocator.mallocator : Mallocator; // One word before and after each allocation. alias A = AffixAllocator!(Mallocator, size_t, size_t); auto b = A.instance.allocate(11); A.instance.prefix(b) = 0xCAFE_BABE; A.instance.suffix(b) = 0xDEAD_BEEF; assert(A.instance.prefix(b) == 0xCAFE_BABE && A.instance.suffix(b) == 0xDEAD_BEEF);
- enum uint alignment;
- Allocator parent;
- size_t goodAllocSize(size_t);
void[] allocate(size_t);
Ternary owns(void[]);
bool expand(ref void[] b, size_t delta);
bool reallocate(ref void[] b, size_t s);
bool deallocate(void[] b);
bool deallocateAll();
Ternary empty(); - static AffixAllocator instance;
- static ref Prefix prefix(void[] b);
static ref Suffix suffix(void[] b); - Affix access functions offering mutable references to the affixes of a block previously allocated with this allocator. b may not be null. They are defined if and only if the corresponding affix is not void.
Precondition: b !is null