Pysolate Spine中文旁白 + HTML 图解全部小课 ↗

知识小点 · 解开一个疑问

COW 内存:范围先留,可见长度再长

用一个 Wasm 实例看清 COW 内存的最大地址范围、稳定 base、可访问长度与超限失败;预留范围不等于 RSS。

01 / 05

先为一个实例预留最大范围

匿名映射覆盖声明的最大地址范围

准备播放
COW
WASM LINEAR MEMORY / RANGE预留范围 ≠ Wasm 可访问长度 ≠ RSS
1 / 5 · 先预留
SOURCEcow_linux.go · newLinuxCOWMemory
执行第 1–3 行

          
          func newLinuxCOWMemory(maximum uint64) (*linuxCOWMemory, error) {
        
          
              mapping, err := unix.Mmap(-1, 0, int(maximum), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS)
        
          
              return &linuxCOWMemory{mapping: mapping, max: int(maximum)}, nil
        
          
          }
        
          
          最大范围:8192 Wasm 页 = 512 MiB
        
Host 映射先覆盖最大范围;Wasm 可见长度单独变化。
MEMORY RANGE每个实例先拥有自己的最大范围
范围状态
预留范围Wasm 可访问声明上限
预留 512 MiBWasm 可访问 0 MiB上限 512 MiB
baseWasm 偏移 →limit
每个实例自己的 base整段范围属于本实例上限 512 MiB

Host 映射已建立;Wasm 可访问长度另由实例内存状态决定。

先有地址范围,再谈 Wasm 可访问长度
旁白

点一下播放即可。也可以只听声音,或拖动进度跳到想看的位置。

0:001:59

正在准备本课音轨与图解。首次播放需要点一下。

跳到某一节 / 查看讲稿