ArenaMemoryProvider

Struct ArenaMemoryProvider 

Source
pub struct ArenaMemoryProvider { /* private fields */ }
Expand description

ArenaMemoryProvider allocates segments from a contiguous memory region that is reserved up-front.

The arena’s memory is initially allocated with PROT_NONE and gradually updated as the JIT requires more space. This approach allows for stable addresses throughout the lifetime of the JIT.

Depending on the underlying platform, requesting large parts of the address space to be allocated might fail. This implementation currently doesn’t do overcommit on Windows.

Note: Memory will be leaked by default unless JITMemoryProvider::free_memory is called to ensure function pointers remain valid for the remainder of the program’s life.

Implementations§

Source§

impl ArenaMemoryProvider

Source

pub fn new_with_size(reserve_size: usize) -> Result<Self, Error>

Create a new memory region with the given size.

Trait Implementations§

Source§

impl Drop for ArenaMemoryProvider

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl JITMemoryProvider for ArenaMemoryProvider

Source§

fn allocate_readexec(&mut self, size: usize, align: u64) -> Result<*mut u8>

Allocate memory that will be executable once finalized.
Source§

fn allocate_readwrite(&mut self, size: usize, align: u64) -> Result<*mut u8>

Allocate writable memory.
Source§

fn allocate_readonly(&mut self, size: usize, align: u64) -> Result<*mut u8>

Allocate memory that will be read-only once finalized.
Source§

unsafe fn free_memory(&mut self)

Free the memory region.
Source§

fn finalize(&mut self, branch_protection: BranchProtection) -> ModuleResult<()>

Finalize the memory region and apply memory protections.
Source§

impl Send for ArenaMemoryProvider

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> Same for T

Source§

type Output = T

Should always be Self
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.