pub struct ScratchSpaceHeapAllocator<'a> { /* private fields */ }
Expand description

An Allocator whose first segment is a backed by a user-provided buffer.

Recall that an Allocator implementation must ensure that allocated segments are initially zeroed. ScratchSpaceHeapAllocator ensures that is the case by zeroing the entire buffer upon initial construction, and then zeroing any potentially used part of the buffer upon deallocate_segment().

You can reuse a ScratchSpaceHeapAllocator by calling message::Builder::into_allocator(), or by initially passing it to message::Builder::new() as a &mut ScratchSpaceHeapAllocator. Such reuse can save significant amounts of zeroing.

Implementations§

source§

impl<'a> ScratchSpaceHeapAllocator<'a>

source

pub fn new(scratch_space: &'a mut [u8]) -> ScratchSpaceHeapAllocator<'a>

Writes zeroes into the entire buffer and constructs a new allocator from it.

If the buffer is large, this operation could be relatively expensive. If you want to reuse the same scratch space in a later message, you should reuse the entire ScratchSpaceHeapAllocator, to avoid paying this full cost again.

source

pub fn second_segment_words(self, value: u32) -> ScratchSpaceHeapAllocator<'a>

Sets the size of the second segment in words, where 1 word = 8 bytes. (The first segment is the scratch space passed to ScratchSpaceHeapAllocator::new().

source

pub fn allocation_strategy( self, value: AllocationStrategy ) -> ScratchSpaceHeapAllocator<'a>

Sets the allocation strategy for segments after the second one.

Trait Implementations§

source§

impl<'a> Allocator for ScratchSpaceHeapAllocator<'a>

source§

fn allocate_segment(&mut self, minimum_size: u32) -> (*mut u8, u32)

Allocates zeroed memory for a new segment, returning a pointer to the start of the segment and a u32 indicating the length of the segment in words. The allocated segment must be at least minimum_size words long (minimum_size * 8 bytes long). Allocator implementations commonly allocate much more than the minimum, to reduce the total number of segments needed. A reasonable strategy is to allocate the maximum of minimum_size and twice the size of the previous segment.
source§

unsafe fn deallocate_segment( &mut self, ptr: *mut u8, word_size: u32, words_used: u32 )

Indicates that a segment, previously allocated via allocate_segment(), is no longer in use. word_size is the length of the segment in words, as returned from allocate_segment(). words_used is always less than or equal to word_size, and indicates how many words (contiguous from the start of the segment) were possibly written with non-zero values. Read more

Auto Trait Implementations§

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>,

§

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>,

§

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.