nimix 0.2.0

An allocator designed to be use by a GC
Documentation
use criterion::{
    criterion_group, 
    criterion_main, 
    Criterion, 
    Throughput, 
    BenchmarkId
};

use nimix::{Allocator, Heap};
use alloc::alloc::Layout;
use core::num::NonZero;

fn alloc_sizes(c: &mut Criterion) {
    let mut group = c.benchmark_group("alloc sizes");

    for size in [1, 2, 4, 8, 16, 32, 64, 128].iter() {
        group.throughput(Throughput::Bytes(*size as u64));
        let heap = Heap::new();
        let allocator = Allocator::from(&heap);

        group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, &size| {
            let layout = Layout::from_size_align(size, 1).unwrap();
            b.iter(|| unsafe { allocator.alloc(layout) });
            unsafe { heap.sweep(NonZero::new(1u8).unwrap()) };
        });
    }

    group.finish();
}

criterion_group!(benches, alloc_sizes);
criterion_main!(benches);