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

A sorted list of holes. It uses the the holes itself to store its nodes.

Implementations

Creates an empty HoleList.

Creates a HoleList that contains the given hole.

Safety

This function is unsafe because it creates a hole at the given hole_addr. This can cause undefined behavior if this address is invalid or if memory from the [hole_addr, hole_addr+size) range is used somewhere else.

The pointer to hole_addr is automatically aligned.

Aligns the given layout for use with HoleList.

Returns a layout with size increased to fit at least HoleList::min_size and proper alignment of a Hole.

The allocate_first_fit and deallocate methods perform the required alignment themselves, so calling this function manually is not necessary.

Searches the list for a big enough hole.

A hole is big enough if it can hold an allocation of layout.size() bytes with the given layout.align(). If such a hole is found in the list, a block of the required size is allocated from it. Then the start address of that block and the aligned layout are returned. The automatic layout alignment is required because the HoleList has some additional layout requirements for each memory block.

This function uses the “first fit” strategy, so it uses the first hole that is big enough. Thus the runtime is in O(n) but it should be reasonably fast for small allocations.

Frees the allocation given by ptr and layout.

This function walks the list and inserts the given 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. The function performs exactly the same layout adjustments as allocate_first_fit and returns the aligned layout.

Returns the minimal allocation size. Smaller allocations or deallocations are not allowed.

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.