Memory
A Memory represents a contiguous array of bytes that WASM code can read and write. The Memory class is a wrapper around the wasmtime::Memory struct.
Properties​
long PageSize​
Get the number of bytes in a page of memory.
long Minimum​
Get the minimum size of this memory in pages. The memory will always be at least Minimum * PageSize bytes in size.
long? Maximum​
Get the maximum size of this memory in pages, or null if there is no maximum.
bool Is64Bit​
Check if this memory represents a 64 bit memory (capable of representing more than 4GB).
Methods​
Size​
long GetSize()​
Get the current size of this memory in pages.
long GetLength()​
Get the current size of this memory in bytes.
Grow(long delta)​
Grow the memory by delta pages.
This will invalidate any pointers or spans which refer to this memory.
Read/Write​
Read<T>(long address)/Write<T>(long address, T value)​
WebAssembly is always little endian, on big endian platforms numeric values must be converted accordingly.
Read or write an unmanaged object of type T from the given address.
ReadString(long address, int length)​
Read a string starting at the given address, with the given length in bytes. Defaults to UTF8 encoding.
WriteString(long address, string value)​
Write a string to the given address. Defaults to UTF8 encoding.
ReadNullTerminatedString(long address)​
Read bytes starting at address until a zero is encountered, interprets those bytes as a UTF8 string.
ReadDouble/WriteDouble​
Read or write a double to the given address, automatically converting endianness if necessary.
ReadSingle/WriteSingle​
Read or write a float to the given address, automatically converting endianness if necessary.
ReadIntPtr/WriteIntPtr​
Read or write an IntPtr (4 bytes or 8 bytes, depending on the host platform), automatically converting endianness if necessary.
ReadInt64/WriteInt64​
Read or write a long to the given address, automatically converting endianness if necessary.
ReadInt32/WriteInt32​
Read or write a int to the given address, automatically converting endianness if necessary.
ReadInt16/WriteInt16​
Read or write a int to the given address, automatically converting endianness if necessary.
ReadByte/WriteByte​
Read or write a byte to the given address.
Get Pointer​
These methods return a pointer/Span which refers directly to the memory. These pointers can become invalid if Grow() is called or if any WASM is executed.
You should always acquire a new pointer/Span when external code executes and never store them.
unsafe IntPtr GetPointer()​
Get a pointer to the start of the memory.
Span<byte> GetSpan(long address, int length)​
Get a span of bytes which points to a section of memory.
Span<byte> GetSpan(long address)​
Get a span of bytes which starts at the given address and is as long as possible (4GB or to the end of the memory, whichever is smaller).
Span<T> GetSpan<T>(long address, int length)​
Get a span which interprets a region of memory as a sequence of unmanaged type T.