pub struct ChunkPool {
    inner: Mutex<ChunkPoolInner>,
}Expand description
A simple pool for allocating and recycling memory chunks of a fixed size, protected by a mutex.
Chunks in the pool are stored as a linked list using a pointer to the next element at the beginning of the chunk.
Fields§
§inner: Mutex<ChunkPoolInner>Implementations§
Source§impl ChunkPool
 
impl ChunkPool
pub fn new() -> Self
Sourcepub fn allocate_chunk(&self, size: usize) -> Result<NonNull<Chunk>, AllocError>
 
pub fn allocate_chunk(&self, size: usize) -> Result<NonNull<Chunk>, AllocError>
Pop a chunk from the pool or allocate a new one.
If the requested size is not equal to the default chunk size, a new chunk is allocated.
Sourceunsafe fn recycle_chunks(&self, chunk: NonNull<Chunk>)
 
unsafe fn recycle_chunks(&self, chunk: NonNull<Chunk>)
Put the provided list of chunks into the pool.
Chunks with size different from the default chunk size are deallocated immediately.
§Safety
Ownership of the provided chunks is transfered to the pool, nothing else can access them after this function runs.
Sourcepub fn purge_chunks(&self, target: u32, count: u32) -> bool
 
pub fn purge_chunks(&self, target: u32, count: u32) -> bool
Deallocate chunks until the pool contains at most target items, or
count chunks have been deallocated.
Returns true if the target number of chunks in the pool was reached,
false if this method stopped before reaching the target.
Purging chunks can be expensive so it is preferable to perform this
operation outside of the critical path. Specifying a lower count
allows the caller to split the work and spread it over time.
Sourcepub fn purge_all_chunks(&self)
 
pub fn purge_all_chunks(&self)
Deallocate all of the chunks.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for ChunkPool
impl RefUnwindSafe for ChunkPool
impl Send for ChunkPool
impl Sync for ChunkPool
impl Unpin for ChunkPool
impl UnwindSafe for ChunkPool
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> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more