Protocol Buffers varint vs fixed

This article is much more a note to myself than something else but this might be interesting for people out there.

I wanted to calculate the thresholds at which it is better it is to use a fixed rather than a varint. Now, knowing that the varint are encoded in base 128, this basically means that we are dealing with power of 128. This gives us the following table:

Threshold value Bytes size (without tag)
0 0
1 1
128 2
16,384 3
2,097,152 4
268,435,456 5
34,359,738,368 6
4,398,046,511,104 7
562,949,953,421,312 8
72,057,594,037,927,936 9

In summary:

  • From 268,435,456 to whatever limit you 32 bits type has, it is better to use a fixed32.
  • From 72,057,594,037,927,936 to whatever limit you 64 bits type has, it is better to use a fixed64.
Written on October 2, 2022