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

Why does varuintN has a fixed bit number “N” even if it uses LEB28 encoding in wasm binary format?

LEB128 是一个“可变长度整数”,这意味着如果我们有一个内部有很多零的数字,我们可以保存 space。就像下面的例子:

对于特定号码 12:

uint32: 00000000 00000000 00000000 00001100

leb128: 00001100

varuint32(带填充的 leb128):10000000 10000000 10000000 00001100(0x80 0x80 0x80 0x0b)

转自官网:

A LEB128 variable-length integer, limited to N bits (i.e., the values [0, 2^N-1]), represented by at most ceil(N/7) bytes that may contain padding 0x80 bytes.

我是不是误会了什么?

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