A WebAssembly abstract address identifies an allocated runtime entity in the appropriate component of the WebAssembly store. Its kind distinguishes a function, memory, table or other entity. It differs from a module-local index and from an offset into WebAssembly linear memory.[ref]
For an original lookup example, let the store's memory at address 0 contain bytes 10,11,12, and its memory at address 1 contain 20,21,22. A WebAssembly module instance maps local memory indices 0,1 to store addresses 1,0. Accessing its local memory index 0 at byte offset 2 therefore gives 22; local memory index 1 at the same offset gives 12.
The numerical labels need their context. A memory address 1 and a function address 1 select different store components. Byte offset 1 instead selects a location within an already selected memory. Thus writing down the integer 1 alone does not specify which of these references is intended.
The example uses invented store indices, not host-machine pointers observed from an engine. The specification uses abstract addresses to describe how runtime references resolve. WebAssembly module declarations supply local indices, instantiation establishes their runtime mappings, and memory instructions apply offsets within the selected object.[ref]
WebAssembly module 2026-11-05
A WebAssembly module is the unit of deployment, loading and compilation in WebAssembly. It collects declarations such as functions, types and memories, can request imports, and can expose exports. Optional initialization includes data segments and a start function. A WebAssembly module is represented in a binary encoding or the readable WebAssembly text format.[ref]
Definitions use zero-based indices, with a separate index space for each kind of definition. Imported functions precede locally defined functions in the function index space. For example, with one imported function and two local functions, their function indices are respectively 0, 1 and 2; memory index 0 belongs to a different space. This explains why inserting a function import can change a numeric call target.[ref]
A WebAssembly module instance is the runtime realization of these declarations, with references to the allocated or imported objects. Keeping a WebAssembly module distinct from a WebAssembly module instance separates a code description from the state used while executing it. Imported state can be shared; the mere use of the same module does not specify all its runtime resources.[ref]
A WebAssembly module instance is the runtime realization of a WebAssembly module. It collects references to the functions, memories and other entities that the WebAssembly module imports, defines or exports. The WebAssembly store contains the allocated runtime objects; a module's local indices are resolved through the corresponding WebAssembly module instance.[ref]
For example, (module (memory (export "memory") 1)) declares and exports one page of WebAssembly linear memory. Instantiate this WebAssembly module twice. Each instantiation allocates its own declared memory, so writing17 into byte0 through the first WebAssembly module instance leaves byte0 in the second at zero. Code can be reused while mutable state remains distinct.[ref]
The import case supplies a useful counterexample. If a WebAssembly module imports memory and two instantiations receive the same memory object, writes through one are visible through the other. The WebAssembly module instances are distinct but that resource is shared. Instantiation therefore links imported entities as well as allocating local definitions; it also initializes active segments and invokes the start function when one is present.[ref]
WebAssembly store 2026-11-05
A WebAssembly store is the abstract runtime state containing allocated entities such as function, memory, table and global instances. A WebAssembly module instance refers to these entities through WebAssembly abstract addresses. A store memory address selects a memory instance; it is distinct from a byte offset within WebAssembly linear memory.[ref]
For an original toy model, let the store contain two memory instances at abstract addresses 0 and 1. Module instances A and B both use local memory index 0, but A maps it to address 0 and B maps it to address 1. A third instance C imports the first memory and maps its own local index 0 to address 0.
Initially, let byte offset 0 in both memories contain zero. Writing 17 through A changes the first memory. Reading offset 0 through B gives zero, while reading it through C gives 17. There are three distinct coordinates: the module-local index, the store address selecting a memory and the offset selecting a byte inside it. Equal local index numbers do not establish sharing.
These invented addresses illustrate the semantics; they are not exposed machine addresses measured from an engine. The WebAssembly store also is not one linear memory or a persistent file store. The abstract model records allocations, while implementations may reclaim unreachable entities when doing so is not semantically observable.[ref]