pub struct ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,{ /* private fields */ }Expand description
A memory allocator that keeps track of already-zeroed memory blocks.
This lets applications move zeroing off of the allocate_zeroed critical
path. Instead they can, for example, bulk-zero memory blocks in the
background before returning them to the allocator.
This allocator wraps an underinglying, inner allocator of type A, layering
the bookkeeping of already-zeroed blocks on top of it.
Because this crate is no_std and does not assume the presence of an
operating system, you must provide your own locking mechanism via the L
type parameter. See the LockingMechanism trait for details.
Implementations§
Source§impl<A, L> ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
impl<A, L> ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
Sourcepub const fn new(inner: A, lock: L) -> Self
pub const fn new(inner: A, lock: L) -> Self
Create a new ZeroAwareAllocator that wraps the given inner
allocator.
Sourcepub fn return_zeroed_memory_to_inner(&mut self)
pub fn return_zeroed_memory_to_inner(&mut self)
Return all of the known-zeroed memory blocks to the underlying allocator.
Trait Implementations§
Source§impl<A, L> Allocator for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
impl<A, L> Allocator for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
Source§fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
🔬This is a nightly-only experimental API. (
allocator_api)Attempts to allocate a block of memory. Read more
Source§unsafe fn deallocate(&self, ptr: NonNull<u8>, user_layout: Layout)
unsafe fn deallocate(&self, ptr: NonNull<u8>, user_layout: Layout)
🔬This is a nightly-only experimental API. (
allocator_api)Deallocates the memory referenced by
ptr. Read moreSource§fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
🔬This is a nightly-only experimental API. (
allocator_api)Behaves like
allocate, but also ensures that the returned memory is zero-initialized. Read moreSource§unsafe fn grow(
&self,
ptr: NonNull<u8>,
user_old_layout: Layout,
new_layout: Layout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn grow( &self, ptr: NonNull<u8>, user_old_layout: Layout, new_layout: Layout, ) -> Result<NonNull<[u8]>, AllocError>
🔬This is a nightly-only experimental API. (
allocator_api)Attempts to extend the memory block. Read more
Source§unsafe fn grow_zeroed(
&self,
ptr: NonNull<u8>,
user_old_layout: Layout,
new_layout: Layout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn grow_zeroed( &self, ptr: NonNull<u8>, user_old_layout: Layout, new_layout: Layout, ) -> Result<NonNull<[u8]>, AllocError>
🔬This is a nightly-only experimental API. (
allocator_api)Behaves like
grow, but also ensures that the new contents are set to zero before being
returned. Read moreSource§impl<A, L> DeallocateZeroed for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
impl<A, L> DeallocateZeroed for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
Source§impl<A, L> Default for ZeroAwareAllocator<A, L>
impl<A, L> Default for ZeroAwareAllocator<A, L>
Source§fn default() -> ZeroAwareAllocator<A, L>
fn default() -> ZeroAwareAllocator<A, L>
Returns the “default value” for a type. Read more
Source§impl<A, L> Drop for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
impl<A, L> Drop for ZeroAwareAllocator<A, L>where
A: Allocator,
L: LockingMechanism,
Auto Trait Implementations§
impl<A, L> !Freeze for ZeroAwareAllocator<A, L>
impl<A, L> !RefUnwindSafe for ZeroAwareAllocator<A, L>
impl<A, L> !Send for ZeroAwareAllocator<A, L>
impl<A, L> !Sync for ZeroAwareAllocator<A, L>
impl<A, L> Unpin for ZeroAwareAllocator<A, L>
impl<A, L> !UnwindSafe for ZeroAwareAllocator<A, L>
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