Struct static_alloc::leaked::Alloca

source ·
pub struct Alloca<T> { /* private fields */ }
Expand description

Zero-sized marker struct that allows running one or several methods.

This ensures that allocation does not exceed certain limits that would likely blow the stack and run into Rust’s canary, this aborting the process.

Implementations§

source§

impl<T> Alloca<T>

source

pub fn new(len: usize) -> Option<Self>

Try to create a representation, that allows functions with dynamically stack-allocated slices.

source

pub fn run<R>(&self, run: impl FnOnce(&mut [MaybeUninit<T>]) -> R) -> R

Allocate a slice of elements.

Please note that instantiating this method relies on the optimizer, to an extent. In particular we will create stack slots of differing sizes depending on the internal size. This shouldn’t have an effect other than moving the stack pointer for various amounts and should never have more than one T in overhead. However, we can’t enforce this. In theory llvm might still reserve stack space for all variants including a probe and thus prematurely assume we have hit the bottom of the available stack space. This is not very likely to occur in practice.

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Alloca<T>
where T: RefUnwindSafe,

§

impl<T> Send for Alloca<T>
where T: Send,

§

impl<T> Sync for Alloca<T>
where T: Sync,

§

impl<T> Unpin for Alloca<T>
where T: Unpin,

§

impl<T> UnwindSafe for Alloca<T>
where T: 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>,

§

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.