wasm 部分中大小字段的格式?
Format of size field in wasm sections?
我正在与我自己的 webAssembly JS 中的 wasm 编译器作斗争。我不确定我的尺寸格式是否正确以及限制是什么
例如127字节的数据段
00 41 00 0b 7f ...data
^^ size 127 bytes
然后用128字节
00 41 00 0b 8001 ...data
^^^^ size 128
我猜测高位if on表示后面会有一个字节。这意味着下一步将是
00 41 00 0b ff7f ...data
^^^^ size 16383
00 41 00 0b 808001 ...data
^^^^^^ size 16384
所以长度是 nibit 顺序(3 字节 6 nibits)103254
其中 nibits 1 和 3 设置了最高位使得查看位 S1110000 S3332222 A5554444
其中 S 总是打开并且 A始终关闭,数字代表 nibit 位顺序。
这是否正确,可以用这种格式表示的最大值是多少?
这是唯一的尺寸格式吗?
是否有标准算法可以将表示长度的 Javascript 数字转换为这种格式,因为目前我的解决方案接缝非常老套?
Wasm 二进制格式使用 LEB128 format for all integer numbers. In the case of sizes specifically unsigned LEB128. However, unlike general LEB128s, Wasm imposes a maximum length, see the specification.
您可以在网上找到大量 LEB128 encoding/decoding 的示例实现,例如,它是 Wasm reference interpreter(在 OCaml 中)中的一个 3 行函数。
我正在与我自己的 webAssembly JS 中的 wasm 编译器作斗争。我不确定我的尺寸格式是否正确以及限制是什么
例如127字节的数据段
00 41 00 0b 7f ...data
^^ size 127 bytes
然后用128字节
00 41 00 0b 8001 ...data
^^^^ size 128
我猜测高位if on表示后面会有一个字节。这意味着下一步将是
00 41 00 0b ff7f ...data
^^^^ size 16383
00 41 00 0b 808001 ...data
^^^^^^ size 16384
所以长度是 nibit 顺序(3 字节 6 nibits)103254
其中 nibits 1 和 3 设置了最高位使得查看位 S1110000 S3332222 A5554444
其中 S 总是打开并且 A始终关闭,数字代表 nibit 位顺序。
这是否正确,可以用这种格式表示的最大值是多少?
这是唯一的尺寸格式吗?
是否有标准算法可以将表示长度的 Javascript 数字转换为这种格式,因为目前我的解决方案接缝非常老套?
Wasm 二进制格式使用 LEB128 format for all integer numbers. In the case of sizes specifically unsigned LEB128. However, unlike general LEB128s, Wasm imposes a maximum length, see the specification.
您可以在网上找到大量 LEB128 encoding/decoding 的示例实现,例如,它是 Wasm reference interpreter(在 OCaml 中)中的一个 3 行函数。