pub trait RuntimeLinearMemory: Send + Sync {
    fn byte_size(&self) -> usize;
    fn maximum_byte_size(&self) -> Option<usize>;
    fn grow_to(&mut self, size: usize) -> Result<()>;
    fn vmmemory(&mut self) -> VMMemoryDefinition;
    fn needs_init(&self) -> bool;
    fn as_any_mut(&mut self) -> &mut dyn Any;

    fn grow(
        &mut self,
        delta_pages: u64,
        store: Option<&mut dyn Store>
    ) -> Result<Option<(usize, usize)>, Error> { ... } }
Expand description

A linear memory

Required Methods

Returns the number of allocated bytes.

Returns the maximum number of bytes the memory can grow to. Returns None if the memory is unbounded.

Grow memory to the specified amount of bytes.

Returns an error if memory can’t be grown by the specified amount of bytes.

Return a VMMemoryDefinition for exposing the memory to compiled wasm code.

Does this memory need initialization? It may not if it already has initial contents courtesy of the MemoryImage passed to RuntimeMemoryCreator::new_memory().

For the pooling allocator, we must be able to downcast this trait to its underlying structure.

Provided Methods

Grows a memory by delta_pages.

This performs the necessary checks on the growth before delegating to the underlying grow_to implementation. A default implementation of this memory is provided here since this is assumed to be the same for most kinds of memory; one exception is shared memory, which must perform all the steps of the default implementation plus the required locking.

The store is used only for error reporting.

Implementors

Proxy all calls through the RwLock.