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