内存(env)
合约导出一块线性 memory。宿主函数通过 (ptr, len) 对读写它;超出内存范围的指针或长度会使宿主函数失败(通常返回 -1),而不是 trap。
VM 会把调用输入复制到偏移量 64 处;参见合约导出 → call。
allocate 已上线
text
(import "env" "allocate" (func (param i32) (result i32)))
allocate(size: i32) → ptr: i32用 bump 分配器预留 size 字节并返回起始地址。宿主只推进一个游标——它不会扩展内存,因此合约必须确保该范围存在。负数大小按 0 处理;单次请求上限为 1 MiB。供期望由宿主分配内存的工具链(AssemblyScript 等)使用。
deallocate 已上线
text
(import "env" "deallocate" (func (param i32)))什么也不做——bump 分配器从不释放内存。提供它是为了让按分配器接口编写的代码能够链接。
abort 已上线
text
(import "env" "abort" (func (param i32 i32 i32 i32)))AssemblyScript 的 abort 钩子,接受它是为了让此类模块能够链接。它什么也不做,也不会停止执行——AssemblyScript 会在其后执行 unreachable,真正使调用失败的是后者。如需有意让调用失败,请 trap(unreachable),这会回滚整个调用树;或者在调用者需要看到消息时,通过 set_return 返回错误。