pub struct Allocator { /* private fields */ }Expand description
A super-simple soft-realtime allocator for managing an external pool of memory
Implementations§
source§impl Allocator
impl Allocator
sourcepub fn new(capacity: u32) -> Self
pub fn new(capacity: u32) -> Self
Create a new allocator to manage a pool of memory
Panics:
- Panics if
capacity == 0
sourcepub fn alloc(&mut self, size: u32) -> Option<Allocation>
pub fn alloc(&mut self, size: u32) -> Option<Allocation>
Try to allocate a region with the provided size
Uses a best-fit strategy, and returns Allocations with arbitrary
alignment.
Returns None if:
size == 0, orsize + 1overflows.
sourcepub fn alloc_with_align(&mut self, size: u32, align: u32) -> Option<Allocation>
pub fn alloc_with_align(&mut self, size: u32, align: u32) -> Option<Allocation>
Try to allocate a region with the provided size & alignment
Implements the following strategy (not quite best-fit):
- Search for a region with at least
size + align - 1, and then truncate the start of the region such that alignment is reached.
This is more prone to causing fragmentation compared to an unaligned
alloc.
Returns None if:
- there are no free-regions with
size + align - 1available space, or size == 0, oralign == 0, orsize + alignoverflows.
sourcepub fn free(&mut self, alloc: Allocation)
pub fn free(&mut self, alloc: Allocation)
Free the given allocation
§Panics
-
May panic if the allocation’s location gets freed twice, without first being re-allocated.
Note: This panic will not catch all double frees.
sourcepub fn total_available(&self) -> u32
pub fn total_available(&self) -> u32
Get the total available memory in this pool
Note: The memory may be fragmented, so it may not be possible to allocate an object of this size.
sourcepub fn largest_available(&self) -> u32
pub fn largest_available(&self) -> u32
Get the size of the largest available memory region in this pool
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Allocator
impl RefUnwindSafe for Allocator
impl Send for Allocator
impl Sync for Allocator
impl Unpin for Allocator
impl UnwindSafe for Allocator
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)