为什么2 ^ 29-1是协议缓冲区中最大的关键

时间:2016-02-25 13:12:49

标签: protocols protocol-buffers

2 ^ 29 -1? 因为“字段编号1-15具有1字节标记。”
32字节没有标签?我知道3字节,但为什么没有标签?

那是varint吗?我无法理解protobuf \ descriptor.cc源代码。

1 个答案:

答案 0 :(得分:1)

所有字段都有一个标记,但对于16和更高的字段编号,标记需要多个字节。因此,字段编号1到15应该用于最常见的字段。是的,编码是varint。

最大的密钥是2 ^ 29,因为最低的3位用于存储字段数据类型。所以29 + 3 = 32非常适合uint32_t

您可以在此处找到更多信息: https://developers.google.com/protocol-buffers/docs/encoding#structure