pub struct LinearAllocator { /* private fields */ }
Expand description
LinearAllocator
is an allocator that keeps a fixed-sized buffer internally
and use it to make allocations. Once the buffer is full, all next allocations fails.
This allocator is useful when you want a “scratch space” for multiple tiny allocations that share the same lifetime.
§Usage:
#![cfg_attr(not(feature = "stable"), feature(allocator_api))]
#[cfg(feature = "vec")]
{
use core::mem::size_of;
use piece::vec::Vec;
use piece::LinearAllocator;
let linear_allocator = LinearAllocator::with_capacity(64 * size_of::<i32>());
let mut vec1 = Vec::with_capacity_in(32, &linear_allocator);
let mut vec2 = Vec::with_capacity_in(32, &linear_allocator);
vec1.extend_from_slice(&[1, 2, 3, 4, 5]);
vec2.extend_from_slice(&[6, 7, 8, 9, 10]);
assert_eq!(vec1, &[1, 2, 3, 4, 5]);
assert_eq!(vec2, &[6, 7, 8, 9, 10]);
}
Implementations§
Source§impl LinearAllocator
impl LinearAllocator
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates a new LinearAllocator with the specified capacity
PANIC:
capacity
must be greater than zero
pub fn allocated_bytes(&self) -> usize
Trait Implementations§
Source§impl Allocator for LinearAllocator
impl Allocator for LinearAllocator
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>, _layout: Layout)
unsafe fn deallocate(&self, _ptr: NonNull<u8>, _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>,
old_layout: Layout,
new_layout: Layout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn grow( &self, ptr: NonNull<u8>, 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>,
old_layout: Layout,
new_layout: Layout,
) -> Result<NonNull<[u8]>, AllocError>
unsafe fn grow_zeroed( &self, ptr: NonNull<u8>, 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 Drop for LinearAllocator
impl Drop for LinearAllocator
impl Send for LinearAllocator
impl Sync for LinearAllocator
Auto Trait Implementations§
impl !Freeze for LinearAllocator
impl RefUnwindSafe for LinearAllocator
impl Unpin for LinearAllocator
impl UnwindSafe for LinearAllocator
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