pub struct SharedBumpArena<B: FixedRange> { /* private fields */ }Expand description
Atomic-cursor bump arena.
Sound under multi-thread &self allocation: the cursor uses a
compare_exchange_weak CAS loop to handle alignment rounding atomically.
Implementations§
Sourcepub fn new(backing: B) -> Result<Self, AllocError>
pub fn new(backing: B) -> Result<Self, AllocError>
Construct a shared bump arena.
Errors if the backing reports a zero-byte range.
Trait Implementations§
Source§fn allocate(&self, layout: NonZeroLayout) -> Result<NonNull<[u8]>, AllocError>
fn allocate(&self, layout: NonZeroLayout) -> Result<NonNull<[u8]>, AllocError>
Allocate a block satisfying
layout. The returned slice’s length is
at least layout.size() but may be larger.Source§fn capacity_bytes(&self) -> Option<usize>
fn capacity_bytes(&self) -> Option<usize>
Total bytes this allocator can issue, if bounded.
None for unbounded
allocators like System. Used by Watermark to compute thresholds.Source§fn allocate_zeroed(
&self,
layout: NonZeroLayout,
) -> Result<NonNull<[u8]>, AllocError>
fn allocate_zeroed( &self, layout: NonZeroLayout, ) -> Result<NonNull<[u8]>, AllocError>
Allocate a zero-initialized block.
Source§unsafe fn grow(
&self,
ptr: NonNull<u8>,
old: NonZeroLayout,
new: NonZeroLayout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn grow( &self, ptr: NonNull<u8>, old: NonZeroLayout, new: NonZeroLayout, ) -> Result<NonNull<[u8]>, AllocError>
Grow an allocation in place if possible, otherwise allocate-copy-free. Read more
Source§unsafe fn shrink(
&self,
ptr: NonNull<u8>,
old: NonZeroLayout,
new: NonZeroLayout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn shrink( &self, ptr: NonNull<u8>, old: NonZeroLayout, new: NonZeroLayout, ) -> Result<NonNull<[u8]>, AllocError>
Shrink an allocation in place if possible, otherwise allocate-copy-free. Read more
Source§fn reset(&mut self) -> Result<(), AllocError>
fn reset(&mut self) -> Result<(), AllocError>
Reclaim everything previously allocated. Default impl returns
AllocError — only arena-style allocators implement a meaningful
reset. Read moreSource§unsafe fn usable_size(
&self,
_ptr: NonNull<u8>,
_layout: NonZeroLayout,
) -> Option<usize>
unsafe fn usable_size( &self, _ptr: NonNull<u8>, _layout: NonZeroLayout, ) -> Option<usize>
Usable size of an existing allocation, if the allocator can report
it. Defaults to
None — implementors that track usable size
override. Read moreSource§fn corruption_events(&self) -> u64
fn corruption_events(&self) -> u64
Detected freelist / metadata corruption events observed by this
allocator since construction. Read more
Source§unsafe fn deallocate(&self, _ptr: NonNull<u8>, _layout: NonZeroLayout)
unsafe fn deallocate(&self, _ptr: NonNull<u8>, _layout: NonZeroLayout)
Release a previously allocated block. Read more
Auto Trait Implementations§
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
Mutably borrows from an owned value. Read more