Struct wasmer_wasix::syscalls::Memory
pub(crate) struct Memory(pub(crate) Memory);
Expand description
A WebAssembly memory
instance.
A memory instance is the runtime representation of a linear memory. It consists of a vector of bytes and an optional maximum size.
The length of the vector always is a multiple of the WebAssembly page size, which is defined to be the constant 65536 – abbreviated 64Ki. Like in a memory type, the maximum size in a memory instance is given in units of this page size.
A memory created by the host or in WebAssembly code will be accessible and mutable from both host and WebAssembly.
Spec: https://webassembly.github.io/spec/core/exec/runtime.html#memory-instances
Tuple Fields§
§0: Memory
Implementations§
§impl Memory
impl Memory
pub fn new(
store: &mut impl AsStoreMut,
ty: MemoryType,
) -> Result<Memory, MemoryError>
pub fn new( store: &mut impl AsStoreMut, ty: MemoryType, ) -> Result<Memory, MemoryError>
Creates a new host Memory
from the provided [MemoryType
].
This function will construct the Memory
using the store
BaseTunables
.
§Example
let m = Memory::new(&mut store, MemoryType::new(1, None, false)).unwrap();
pub fn new_from_existing(
new_store: &mut impl AsStoreMut,
memory: VMMemory,
) -> Memory
pub fn new_from_existing( new_store: &mut impl AsStoreMut, memory: VMMemory, ) -> Memory
Create a memory object from an existing memory and attaches it to the store
pub fn ty(&self, store: &impl AsStoreRef) -> MemoryType
pub fn ty(&self, store: &impl AsStoreRef) -> MemoryType
Returns the [MemoryType
] of the Memory
.
§Example
let mt = MemoryType::new(1, None, false);
let m = Memory::new(&mut store, mt).unwrap();
assert_eq!(m.ty(&mut store), mt);
pub fn view<'a>(&self, store: &'a (impl AsStoreRef + ?Sized)) -> MemoryView<'a>
pub fn view<'a>(&self, store: &'a (impl AsStoreRef + ?Sized)) -> MemoryView<'a>
Creates a view into the memory that then allows for read and write
pub fn grow<IntoPages>(
&self,
store: &mut impl AsStoreMut,
delta: IntoPages,
) -> Result<Pages, MemoryError>
pub fn grow<IntoPages>( &self, store: &mut impl AsStoreMut, delta: IntoPages, ) -> Result<Pages, MemoryError>
Grow memory by the specified amount of WebAssembly Pages
and return
the previous memory size.
§Example
let m = Memory::new(&mut store, MemoryType::new(1, Some(3), false)).unwrap();
let p = m.grow(&mut store, 2).unwrap();
assert_eq!(p, Pages(1));
assert_eq!(m.view(&mut store).size(), Pages(3));
§Errors
Returns an error if memory can’t be grown by the specified amount of pages.
let m = Memory::new(&mut store, MemoryType::new(1, Some(1), false)).unwrap();
// This results in an error: `MemoryError::CouldNotGrow`.
let s = m.grow(&mut store, 1).unwrap();
pub fn grow_at_least(
&self,
store: &mut impl AsStoreMut,
min_size: u64,
) -> Result<(), MemoryError>
pub fn grow_at_least( &self, store: &mut impl AsStoreMut, min_size: u64, ) -> Result<(), MemoryError>
Grows the memory to at least a minimum size. If the memory is already big enough for the min size then this function does nothing
pub fn reset(&self, store: &mut impl AsStoreMut) -> Result<(), MemoryError>
pub fn reset(&self, store: &mut impl AsStoreMut) -> Result<(), MemoryError>
Resets the memory back to zero length
pub fn copy_to_store(
&self,
store: &impl AsStoreRef,
new_store: &mut impl AsStoreMut,
) -> Result<Memory, MemoryError>
pub fn copy_to_store( &self, store: &impl AsStoreRef, new_store: &mut impl AsStoreMut, ) -> Result<Memory, MemoryError>
Attempts to duplicate this memory (if its clonable) in a new store (copied memory)
pub fn is_from_store(&self, store: &impl AsStoreRef) -> bool
pub fn is_from_store(&self, store: &impl AsStoreRef) -> bool
Checks whether this Memory
can be used with the given context.
pub fn try_clone(
&self,
store: &impl AsStoreRef,
) -> Result<VMMemory, MemoryError>
pub fn try_clone( &self, store: &impl AsStoreRef, ) -> Result<VMMemory, MemoryError>
Attempts to clone this memory (if its clonable)
Attempts to clone this memory (if its clonable) in a new store (cloned memory will be shared between those that clone it)
Get a [SharedMemory
].
Only returns Some(_)
if the memory is shared, and if the target
backend supports shared memory operations.
See [SharedMemory
] and its methods for more information.
Trait Implementations§
impl Eq for Memory
impl StructuralPartialEq for Memory
Auto Trait Implementations§
impl Freeze for Memory
impl RefUnwindSafe for Memory
impl Send for Memory
impl Sync for Memory
impl Unpin for Memory
impl UnwindSafe for Memory
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more