Struct linked_list_allocator::Heap
[−]
[src]
pub struct Heap { // some fields omitted }
A fixed size heap backed by a linked list of free memory blocks.
Methods
impl Heap
[src]
const fn empty() -> Heap
Creates an empty heap. All allocate calls will return None
.
unsafe fn new(heap_bottom: usize, heap_top: usize) -> Heap
Creates a new heap with the given bottom
and top
. Both addresses must be valid and the
memory in the [heap_bottom, heap_top)
range must not be used for anything else. This
function is unsafe because it can cause undefined behavior if the given addresses are
invalid.
fn allocate_first_fit(&mut self, size: usize, align: usize) -> Option<*mut u8>
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.
unsafe fn deallocate(&mut self, ptr: *mut u8, size: usize, _align: usize)
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.
fn bottom(&self) -> usize
Returns the bottom address of the heap.
fn top(&self) -> usize
Returns the top address of the heap.