pub trait AllocablePage {
const SIZE: usize;
// Required methods
fn bitfield(&self) -> &[AtomicU64; 8];
fn bitfield_mut(&mut self) -> &mut [AtomicU64; 8];
fn prev(&mut self) -> &mut Rawlink<Self>
where Self: Sized;
fn next(&mut self) -> &mut Rawlink<Self>
where Self: Sized;
// 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<(), AllocationError> { ... }
}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),
prevandnextpointers to insert the page in free lists
Required Associated Constants§
Required Methods§
fn bitfield(&self) -> &[AtomicU64; 8]
fn bitfield_mut(&mut self) -> &mut [AtomicU64; 8]
fn prev(&mut self) -> &mut Rawlink<Self>where
Self: Sized,
fn next(&mut self) -> &mut Rawlink<Self>where
Self: Sized,
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.
Sourcefn is_empty(&self, relevant_bits: usize) -> bool
fn is_empty(&self, relevant_bits: usize) -> bool
Checks if the page has currently no allocations.
Sourcefn deallocate(
&self,
ptr: NonNull<u8>,
layout: Layout,
) -> Result<(), AllocationError>
fn deallocate( &self, ptr: NonNull<u8>, layout: Layout, ) -> Result<(), AllocationError>
Deallocates a memory object within this page.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.