Adma is a general purpose allocator for zig with the following features:
- Slab Allocation strategy
- Optimized for rapid small memory allocation/releasing
- Reuse of OS provided allocations
- Non-Blocking allocation & free within a thread
- Multithreaded Capable
- Automatic feature reduction for single threaded use
- Safe freeing of memory sent to a different thread
In Zig:
const adma = @Import("adma");
pub fn example() !void {
// .initWith using a c allocator
//const adma_ref = try adma.AdmaAllocator.initWith(std.heap.c_allocator, 0);
// .init defaults to using std.heap.page_allocator underneath for ease of use
const adma_ref = adma.AdmaAllocator.init();
defer adma_ref.deinit();
const allocator = &adma_ref.allocator;
var buf = try allocator.alloc(u8, 100);
defer allocator.free(buf);
}
- If using adma in a multithreaded context, ensure you
AdmaAllocator.init/deinit
in every thread; not pass the allocator pointer to the additional thread - If using for zig prior to the big allocation interface change, see the branch
called
pre-allocator-revamp