为什么varuintN的固定位数为“N”,即使它使用的是wasm二进制格式的LEB28编码?

时间:2017-06-27 08:46:30

标签: webassembly

LEB128是一个“可变长度整数”,这意味着如果我们有一个内部有很多零的数字,我们就可以节省空间。如下图所示:

对于特定数字 12

uint32:00000000 00000000 00000000 00001100

leb128:00001100

varuint32(leb128 with paddings):10000000 10000000 10000000 00001100(0x80 0x80 0x80 0x0b)

引自官方网站:

  

LEB128可变长度整数,限制为N位(即值[0,2 ^ N-1]),由最多ceil(N / 7)字节表示,可包含填充0x80字节。

我误解了什么吗?

1 个答案:

答案 0 :(得分:0)

WebAssembly二进制文件中的整数编码仍然是可变长度的,它只是强加了一个最大长度。有关说明示例,另请参阅draft spec。这种限制的原因在于它允许通过完全展开解码循环来优化解码器,这可以产生很大的不同。