HybridAllocator

Struct HybridAllocator 

Source
pub struct HybridAllocator<const N: usize, F: Allocator> { /* private fields */ }
Expand description

A hybrid allocator that first tries to allocate from a stack‑backed bump allocator and falls back to a user‑provided allocator.

N - size of the stack buffer in bytes. F - the fallback allocator type (e.g. std::alloc::Global or any custom allocator that implements Allocator).

Implementations§

Source§

impl<const N: usize, F: Allocator> HybridAllocator<N, F>

Source

pub const fn new(fallback: F) -> Self

Create a new hybrid allocator.

The caller supplies the fallback allocator that will be used when the stack buffer cannot satisfy a request.

Source

pub unsafe fn reset(&mut self)

Reset the allocator, discarding all previously allocated memory.

§Safety

the caller must guarantee that no live allocation created by this allocator is still in use.

Source

pub fn current_offset(&self) -> usize

Get the current offset of the stack allocator.

Source

pub fn fallback(&self) -> &F

Get a reference to the fallback allocator.

Source

pub fn is_stack_exausted(&self) -> bool

Check if the last allocation used the fallback allocator. if true, the stack buffer is exhausted and all further allocations will go to the fallback until reset is called.

Trait Implementations§

Source§

impl<const N: usize, F: Allocator> Allocator for HybridAllocator<N, F>

Source§

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)

🔬This is a nightly-only experimental API. (allocator_api)
Deallocates the memory referenced by ptr. Read more
Source§

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 shrink( &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 shrink the memory block. Read more
Source§

fn by_ref(&self) -> &Self
where Self: Sized,

🔬This is a nightly-only experimental API. (allocator_api)
Creates a “by reference” adapter for this instance of Allocator. Read more
Source§

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 more
Source§

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 more

Auto Trait Implementations§

§

impl<const N: usize, F> !Freeze for HybridAllocator<N, F>

§

impl<const N: usize, F> !RefUnwindSafe for HybridAllocator<N, F>

§

impl<const N: usize, F> Send for HybridAllocator<N, F>
where F: Send,

§

impl<const N: usize, F> Sync for HybridAllocator<N, F>
where F: Sync,

§

impl<const N: usize, F> Unpin for HybridAllocator<N, F>
where F: Unpin,

§

impl<const N: usize, F> UnwindSafe for HybridAllocator<N, F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.