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§

source

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.

source

const METADATA_SIZE: usize

source

const HEAP_ID_OFFSET: usize

Required Methods§

source

fn clear_metadata(&mut self)

source

fn bitfield(&self) -> &[AtomicU64; 8]

source

fn bitfield_mut(&mut self) -> &mut [AtomicU64; 8]

Provided Methods§

source

fn first_fit(&self, layout: Layout) -> Option<(usize, usize)>

Tries to find a free block within data that satisfies alignment requirement.

source

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.

source

fn is_full(&self) -> bool

Checks if we can still allocate more objects of a given layout within the page.

source

fn is_empty(&self, relevant_bits: usize) -> bool

Checks if the page has currently no allocations.

source

fn deallocate( &self, ptr: NonNull<u8>, layout: Layout ) -> Result<(), &'static str>

Deallocates a memory object within this page.

Implementors§

source§

impl AllocablePage for ObjectPage8k

source§

const SIZE: usize = 8_192usize

source§

const METADATA_SIZE: usize = 80usize

source§

const HEAP_ID_OFFSET: usize = 8_112usize