uint64需要8个字节的存储空间吗?

9 go

官方文档说uint64是一个64位的无符号整数,这是否意味着任何uint64数字应该占用8个字节的存储空间,无论它有多小或多大?

编辑:

谢谢大家的回答!

当我发现binary.PutUvarint消耗多达10个字节来存储大量时uint64,我提出了疑问,尽管最大值uint64应该只需要8个字节.

然后我在Golang lib的源代码中找到了我的疑问:

Design note:
// At most 10 bytes are needed for 64-bit values. The encoding could
// be more dense: a full 64-bit value needs an extra byte just to hold bit 63.
// Instead, the msb of the previous byte could be used to hold bit 63 since we
// know there can't be more than 64 bits. This is a trivial improvement and
// would reduce the maximum encoding length to 9 bytes. However, it breaks the
// invariant that the msb is always the "continuation bit" and thus makes the
// format incompatible with a varint encoding for larger numbers (say 128-bit).
Run Code Online (Sandbox Code Playgroud)

Int*_*net 11

根据http://golang.org/ref/spec#Size_and_alignment_guarantees:

type                                 size in bytes

byte, uint8, int8                     1
uint16, int16                         2
uint32, int32, float32                4
uint64, int64, float64, complex64     8
complex128                           16
Run Code Online (Sandbox Code Playgroud)

所以,是的,uint64 总是占用8个字节.