Struct fixed_bump::Bump
source · [−]pub struct Bump<Size, Align = Size>(_);
Expand description
A bump allocator that allocates memory in non-amortized O(1) (constant) time.
The allocator internally uses fixed-size chunks of memory. The size and
alignment of each chunk of memory is determined by the type parameters
Size
and Align
: the size is mem::size_of::<Size>()
and the
alignment is mem::align_of::<Align>()
. The default value of
Align
is Size
, so you can specify both the size and alignment with a
single type parameter.
A common use of this type, and the most space-efficient way to use it, is
to allocate many values of the same type (or at least the same size and
alignment). In this case, it may be convenient to specify the chunk size
using an array type: to use properly aligned chunks large enough to
allocate n
values of type T
, pass [T; n]
as the Size
parameter,
which will also be the Align
parameter by default.
Implementations
sourceimpl<Size, Align> Bump<Size, Align>
impl<Size, Align> Bump<Size, Align>
sourcepub fn allocate(&self, layout: Layout) -> Option<NonNull<[u8]>>
pub fn allocate(&self, layout: Layout) -> Option<NonNull<[u8]>>
Tries to allocate memory with a size and alignment matching layout
.
Returns a pointer to the memory on success, or None
on failure.
The memory is valid until the Bump
is dropped. Note that the
returned memory could be larger than layout.size()
.
This method is similar to Allocator::allocate
, except it returns an
Option
instead of a Result
.
Allocation is guaranteed to succeed, assuming the global allocator
succeeds, if layout.size()
is less than or equal to
mem::size_of::<Size>()
and layout.align()
is less than
or equal to mem::align_of::<Align>()
.
Allocation may fail, but is not guaranteed to fail, if
layout.align()
is greater than
mem::align_of::<Align>()
. Allocation is guaranteed to
fail if layout.size()
is greater than
mem::size_of::<Size>()
.
sourcepub fn alloc_value<T>(&self, value: T) -> &mut T
pub fn alloc_value<T>(&self, value: T) -> &mut T
Allocates a value of type T
.
The memory is initialized with value
and a reference to the value is
returned. Note that the value’s destructor will not be called
automatically.
Panics
Panics if Self::allocate
is not able to allocate memory matching
Layout::new::<T>()
. See Self::allocate
for
details regarding the circumstances in which allocation can fail.
For a non-panicking equivalent, see Self::try_alloc_value
.
sourcepub fn try_alloc_value<T>(&self, value: T) -> Result<&mut T, T>
pub fn try_alloc_value<T>(&self, value: T) -> Result<&mut T, T>
Tries to allocate a value of type T
.
If the allocation succeeds, the memory is initialized with value
and
a reference to the value is returned. Note that the value’s destructor
will not be called automatically.
Allocation succeeds if and only if Self::allocate
is able to
allocate memory matching Layout::new::<T>()
. See Self::allocate
for details regarding the circumstances in which allocation can fail.
Errors
If allocation fails, Err(value)
is returned.
Trait Implementations
sourceimpl<Size, Align> Allocator for Bump<Size, Align>
impl<Size, Align> Allocator for Bump<Size, Align>
sourcefn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
allocator_api
)Attempts to allocate a block of memory. Read more
sourceunsafe fn deallocate(&self, _ptr: NonNull<u8>, _layout: Layout)
unsafe fn deallocate(&self, _ptr: NonNull<u8>, _layout: Layout)
allocator_api
)Deallocates the memory referenced by ptr
. Read more
sourcefn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError>
allocator_api
)Behaves like allocate
, but also ensures that the returned memory is zero-initialized. Read more
sourceunsafe 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>
allocator_api
)Attempts to extend the memory block. Read more
sourceunsafe 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>
allocator_api
)Behaves like grow
, but also ensures that the new contents are set to zero before being
returned. Read more
Auto Trait Implementations
impl<Size, Align = Size> !RefUnwindSafe for Bump<Size, Align>
impl<Size, Align> Send for Bump<Size, Align>
impl<Size, Align = Size> !Sync for Bump<Size, Align>
impl<Size, Align> Unpin for Bump<Size, Align>
impl<Size, Align> UnwindSafe for Bump<Size, Align>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more