fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>;
unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout);
de https://doc.rust-lang.org/std/alloc/trait.Allocator.html
Observo também que, em contraste, GlobalAlloc usa *mut u8
consistentemente https://doc.rust-lang.org/std/alloc/trait.GlobalAlloc.html
unsafe fn alloc(&self, layout: Layout) -> *mut u8;
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout);