[][src]Struct linked_list_allocator::Heap

pub struct Heap { /* fields omitted */ }

A fixed size heap backed by a linked list of free memory blocks.

Methods

impl Heap[src]

pub const fn empty() -> Heap[src]

Creates an empty heap. All allocate calls will return None.

pub unsafe fn init(&mut self, heap_bottom: usize, heap_size: usize)[src]

Initializes an empty heap

Unsafety

This function must be called at most once and must only be used on an empty heap.

pub unsafe fn new(heap_bottom: usize, heap_size: usize) -> Heap[src]

Creates a new heap with the given bottom and size. The bottom address must be valid and the memory in the [heap_bottom, heap_bottom + heap_size) range must not be used for anything else. This function is unsafe because it can cause undefined behavior if the given address is invalid.

pub fn allocate_first_fit(&mut self, layout: Layout) -> Result<NonNull<u8>, ()>[src]

Allocates a chunk of the given size with the given alignment. Returns a pointer to the beginning of that chunk if it was successful. Else it returns None. This function scans the list of free memory blocks and uses the first block that is big enough. The runtime is in O(n) where n is the number of free blocks, but it should be reasonably fast for small allocations.

pub unsafe fn deallocate(&mut self, ptr: NonNull<u8>, layout: Layout)[src]

Frees the given allocation. ptr must be a pointer returned by a call to the allocate_first_fit function with identical size and alignment. Undefined behavior may occur for invalid arguments, thus this function is unsafe.

This function walks the list of free memory blocks and inserts the freed block at the correct place. If the freed block is adjacent to another free block, the blocks are merged again. This operation is in O(n) since the list needs to be sorted by address.

pub fn bottom(&self) -> usize[src]

Returns the bottom address of the heap.

pub fn size(&self) -> usize[src]

Returns the size of the heap.

pub fn top(&self) -> usize[src]

Return the top address of the heap

pub unsafe fn extend(&mut self, by: usize)[src]

Extends the size of the heap by creating a new hole at the end

Unsafety

The new extended area must be valid

Auto Trait Implementations

impl Send for Heap

impl Sync for Heap

impl Unpin for Heap

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.