Trait slabmalloc_safe::AllocablePage
source · pub trait AllocablePage {
const SIZE: usize;
const METADATA_SIZE: usize;
const HEAP_ID_OFFSET: usize;
// Required methods
fn clear_metadata(&mut self);
fn bitfield(&self) -> &[AtomicU64; 8];
fn bitfield_mut(&mut self) -> &mut [AtomicU64; 8];
// Provided methods
fn first_fit(&self, layout: Layout) -> Option<(usize, usize)> { ... }
fn allocate(&mut self, layout: Layout) -> *mut u8 { ... }
fn is_full(&self) -> bool { ... }
fn is_empty(&self, relevant_bits: usize) -> bool { ... }
fn deallocate(
&self,
ptr: NonNull<u8>,
layout: Layout
) -> Result<(), &'static str> { ... }
}
Expand description
This trait is used to define a page from which objects are allocated
in an SCAllocator
.
The implementor of this trait needs to provide access to the page meta-data, which consists of:
- A bitfield (to track allocations),
Required Associated Constants§
sourceconst SIZE: usize
const SIZE: usize
The total size (in bytes) of the page.
Note
We also assume that the address of the page will be aligned to SIZE
.
const METADATA_SIZE: usize
const HEAP_ID_OFFSET: usize
Required Methods§
fn clear_metadata(&mut self)
fn bitfield(&self) -> &[AtomicU64; 8]
fn bitfield_mut(&mut self) -> &mut [AtomicU64; 8]
Provided Methods§
sourcefn first_fit(&self, layout: Layout) -> Option<(usize, usize)>
fn first_fit(&self, layout: Layout) -> Option<(usize, usize)>
Tries to find a free block within data
that satisfies alignment
requirement.
sourcefn allocate(&mut self, layout: Layout) -> *mut u8
fn allocate(&mut self, layout: Layout) -> *mut u8
Tries to allocate an object within this page.
In case the slab is full, returns a null ptr.
sourcefn is_full(&self) -> bool
fn is_full(&self) -> bool
Checks if we can still allocate more objects of a given layout within the page.