A fixed size heap backed by a linked list of free memory blocks.
Creates an empty heap. All allocate calls will return
Initializes an empty heap
This function must be called at most once and must only be used on an empty heap.
Creates a new heap with the given
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
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.
Returns the bottom address of the heap.
Returns the size of the heap.
Return the top address of the heap
Extends the size of the heap by creating a new hole at the end
The new extended area must be valid
type Error = Infallible
The type returned in the event of a conversion error.