[−][src]Struct linked_list_allocator::Heap
A fixed size heap backed by a linked list of free memory blocks.
Methods
impl Heap
[src]
pub const fn empty() -> Heap
[src]
Creates an empty heap. All allocate calls will return None
.
pub unsafe fn init(&mut self, heap_bottom: usize, heap_size: usize)
[src]
Initializes an empty heap
Unsafety
This function must be called at most once and must only be used on an empty heap.
pub unsafe fn new(heap_bottom: usize, heap_size: usize) -> Heap
[src]
Creates a new heap with the given bottom
and 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>, AllocErr>
[src]
&mut self,
layout: Layout
) -> Result<NonNull<u8>, AllocErr>
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.
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.
pub fn bottom(&self) -> usize
[src]
Returns the bottom address of the heap.
pub fn size(&self) -> usize
[src]
Returns the size of the heap.
pub fn top(&self) -> usize
[src]
Return the top address of the heap
pub unsafe fn extend(&mut self, by: usize)
[src]
Extends the size of the heap by creating a new hole at the end
Unsafety
The new extended area must be valid
Trait Implementations
impl Alloc for Heap
[src]
unsafe fn alloc(&mut self, layout: Layout) -> Result<NonNull<u8>, AllocErr>
[src]
unsafe fn dealloc(&mut self, ptr: NonNull<u8>, layout: Layout)
[src]
fn usable_size(&self, layout: &Layout) -> (usize, usize)
[src]
allocator_api
)Returns bounds on the guaranteed usable size of a successful allocation created with the specified layout
. Read more
unsafe fn realloc(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<NonNull<u8>, AllocErr>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<NonNull<u8>, AllocErr>
allocator_api
)Returns a pointer suitable for holding data described by a new layout with layout
’s alignment and a size given by new_size
. To accomplish this, this may extend or shrink the allocation referenced by ptr
to fit the new layout. Read more
unsafe fn alloc_zeroed(
&mut self,
layout: Layout
) -> Result<NonNull<u8>, AllocErr>
[src]
&mut self,
layout: Layout
) -> Result<NonNull<u8>, AllocErr>
allocator_api
)Behaves like alloc
, but also ensures that the contents are set to zero before being returned. Read more
unsafe fn alloc_excess(&mut self, layout: Layout) -> Result<Excess, AllocErr>
[src]
allocator_api
)Behaves like alloc
, but also returns the whole size of the returned block. For some layout
inputs, like arrays, this may include extra storage usable for additional data. Read more
unsafe fn realloc_excess(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<Excess, AllocErr>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<Excess, AllocErr>
allocator_api
)Behaves like realloc
, but also returns the whole size of the returned block. For some layout
inputs, like arrays, this may include extra storage usable for additional data. Read more
unsafe fn grow_in_place(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
allocator_api
)Attempts to extend the allocation referenced by ptr
to fit new_size
. Read more
unsafe fn shrink_in_place(
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
[src]
&mut self,
ptr: NonNull<u8>,
layout: Layout,
new_size: usize
) -> Result<(), CannotReallocInPlace>
allocator_api
)Attempts to shrink the allocation referenced by ptr
to fit new_size
. Read more
fn alloc_one<T>(&mut self) -> Result<NonNull<T>, AllocErr>
[src]
allocator_api
)Allocates a block suitable for holding an instance of T
. Read more
unsafe fn dealloc_one<T>(&mut self, ptr: NonNull<T>)
[src]
allocator_api
)Deallocates a block suitable for holding an instance of T
. Read more
fn alloc_array<T>(&mut self, n: usize) -> Result<NonNull<T>, AllocErr>
[src]
allocator_api
)Allocates a block suitable for holding n
instances of T
. Read more
unsafe fn realloc_array<T>(
&mut self,
ptr: NonNull<T>,
n_old: usize,
n_new: usize
) -> Result<NonNull<T>, AllocErr>
[src]
&mut self,
ptr: NonNull<T>,
n_old: usize,
n_new: usize
) -> Result<NonNull<T>, AllocErr>
allocator_api
)Reallocates a block previously suitable for holding n_old
instances of T
, returning a block suitable for holding n_new
instances of T
. Read more
unsafe fn dealloc_array<T>(
&mut self,
ptr: NonNull<T>,
n: usize
) -> Result<(), AllocErr>
[src]
&mut self,
ptr: NonNull<T>,
n: usize
) -> Result<(), AllocErr>
allocator_api
)Deallocates a block suitable for holding n
instances of T
. Read more
Auto Trait Implementations
Blanket Implementations
impl<T> From for T
[src]
impl<T, U> TryFrom for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> Into for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Borrow for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,