pub struct Heap { /* private fields */ }
Expand description

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

Implementations

Initializes an empty heap

Safety

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

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.

The provided memory range must be valid for the 'static lifetime.

Initialize an empty heap with provided memory.

The caller is responsible for procuring a region of raw memory that may be utilized by the allocator. This might be done via any method such as (unsafely) taking a region from the program’s memory, from a mutable static, or by allocating and leaking such memory from another allocator.

The latter method may be especially useful if the underlying allocator does not perform deallocation (e.g. a simple bump allocator). Then the overlaid linked-list-allocator can provide memory reclamation.

Panics

This method panics if the heap is already initialized.

Creates a new heap with the given bottom and size.

Safety

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.

The provided memory range must be valid for the 'static lifetime.

Creates a new heap from a slice of raw memory.

This has the same effect as [init_from_slice] on an empty heap, but it is combined into a single operation that can not panic.

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.

Frees the given allocation. ptr must be a pointer returned by a call to the allocate_first_fit function with identical size and alignment.

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.

Safety

ptr must be a pointer returned by a call to the [allocate_first_fit] function with identical layout. Undefined behavior may occur for invalid arguments.

Returns the bottom address of the heap.

Returns the size of the heap.

Return the top address of the heap

Returns the size of the used part of the heap

Returns the size of the free part of the heap

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

Safety

The amount of data given in by MUST exist directly after the original range of data provided when constructing the Heap. The additional data must have the same lifetime of the original range of data.

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.