[−][src]Struct linked_list_allocator::hole::HoleList
A sorted list of holes. It uses the the holes itself to store its nodes.
Implementations
impl HoleList
[src]
pub const fn empty() -> HoleList
[src]
Creates an empty HoleList
.
pub unsafe fn new(hole_addr: usize, hole_size: usize) -> HoleList
[src]
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.
pub fn align_layout(layout: Layout) -> Layout
[src]
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.
pub fn allocate_first_fit(
&mut self,
layout: Layout
) -> Result<(NonNull<u8>, Layout), ()>
[src]
&mut self,
layout: Layout
) -> Result<(NonNull<u8>, Layout), ()>
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.
pub unsafe fn deallocate(&mut self, ptr: NonNull<u8>, layout: Layout) -> Layout
[src]
Frees the allocation given by ptr
and layout
.
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.
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.
pub fn min_size() -> usize
[src]
Returns the minimal allocation size. Smaller allocations or deallocations are not allowed.
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,