rulloc 0.1.0

General purpose memory allocator
Documentation
#![feature(allocator_api)]

use std::{
    alloc::{Allocator, Layout},
    ptr::NonNull,
};

use rulloc::Rulloc;

fn print_alloc(addr: NonNull<u8>, layout: Layout) {
    println!("Alloc of {} bytes at {addr:?}", layout.size());
}

fn main() {
    let allocator = Rulloc::<3>::with_bucket_sizes([8, 16, 24]);

    println!("Allocator configured with bucket sizes 8, 16 and 24.");
    println!("Notice how addresses are located in different regions.");
    println!("If page size is 4096 bytes there should be 4KB of difference between them:");

    unsafe {
        let layout1 = Layout::array::<u8>(8).unwrap();
        let addr1 = allocator.allocate(layout1).unwrap().cast();
        print_alloc(addr1, layout1);

        let layout2 = Layout::array::<u8>(16).unwrap();
        let addr2 = allocator.allocate(layout2).unwrap().cast();
        print_alloc(addr2, layout2);

        let layout3 = Layout::array::<u8>(24).unwrap();
        let addr3 = allocator.allocate(layout3).unwrap().cast();
        print_alloc(addr3, layout3);

        allocator.deallocate(addr1, layout1);
        allocator.deallocate(addr2, layout2);
        allocator.deallocate(addr3, layout3);
    }
}