= WebAssembly linear memory
{c}
<WebAssembly linear memory> is an indexed sequence of <bytes> accessed by <WebAssembly> memory instructions. Its runtime representation records its type and current <byte> sequence. The length is a multiple of the <WebAssembly> page size, $65\,536$ <bytes>, or $64\,\mathrm{KiB}$. Declared limits give an initial minimum and optionally a maximum size in pages.<WebAssembly Core Specification by the W3C WebAssembly Community Group>[Execution, Runtime Structure, Memory Instances; Syntax, Types, Memory Types]{ref}
A load must fit its entire access into the current <WebAssembly linear memory>. For an instruction offset of zero, a four-<byte> `i32.load` in a one-page memory succeeds at address $65\,532$: its last accessed <byte> has address $65\,535$. At address $65\,533$, it would need a <byte> at address $65\,536$ and therefore traps. In general, effective address $a$ and width $w$ must satisfy $a+w\leq L$, where $L$ is the current length; the check includes the instruction's immediate offset.<WebAssembly Core Specification by the W3C WebAssembly Community Group>[Execution, Memory Instructions, numeric load algorithm, steps 3–6]{ref}
This boundary example also distinguishes alignment from bounds. Ordinary unaligned loads are permitted; their alignment annotation is an optimization hint. A successful bounds check establishes that the accessed <bytes> lie inside this memory. It does not establish that the program selected its intended object.<WebAssembly Core Specification by the W3C WebAssembly Community Group>[Execution, Memory Instructions, alignment note]{ref}
Back to article page