为什么 BSON 不使用 uint32_t 而不是 int32_t 作为文档长度

Why BSON is not using uint32_t instead of int32_t for document lenght

根据 BSON 规范,int32_t 用于构成文档的总字节数。

我还可以看到 mongo-c-driver 正在使用 Libbson,它正在使用 int32_t。

但是使用有符号整数而不是无符号整数的原因是什么?

文档大小永远不会低于 0。有人可以解释一下原因吗?

文档大小限制为 16 MB,适合带符号的 32 位整数,还有剩余空间。

虽然 考虑了大于 16 MB 的文档大小限制 ,但我的猜测是没有认真考虑超过 2 GB 的文档大小,因此使用 unsigned 提供的范围差异长度的 32 位整数不是一个有意义的好处。

因此,没有理由使用无符号类型。

不使用无符号类型的原因:

  • 环绕电位从 UINT_MAX 到 0。
  • -1 可用作特殊指示符。