1. 一块可增长的连续内存
WebAssembly 模块使用一块连续的线性内存(linear memory)作为主要数据存储区,以字节为单位寻址。模块可以声明内存的初始页数和最大页数,运行时在需要时按页(通常每页 64 KB)动态增长,但不会超过设定的上限。
2. 内存安全与边界约束
所有对内存的访问都会经过边界检查,越界读写会触发陷阱(trap)而非破坏其他内存区域。这一机制是 WebAssembly 沙箱安全性的基础,确保一个模块无法破坏宿主或其他模块的数据。
3. 3.0 版本引入的多内存与 64 位地址空间
核心规范 3.0 版本对内存模型做了重要扩展:
- 64 位地址空间(Memory64):内存和表的地址类型可使用 i64,理论上将可用地址空间从 4 GB 扩展到 16 EB(在 Web 环境中仍受 16 GB 上限约束),尤其有利于非 Web 生态处理超大规模数据
- 多内存(Multiple Memories):单个模块可声明并直接访问多个内存对象,支持在内存之间直接复制数据,为静态链接、安全隔离(分离私有数据)、缓冲和插桩等场景提供了新的可能