9
votes

Un uint64 prend-il 8 octets de stockage?

Document officiel dit que UINT64 est un entier non signé de 64 bits, cela signifie-t-il que tout numéro UINT64 devrait prendre 8 octets de stockage, quelle que soit la taille de la taille ou de la taille?

EDIT: P>

Merci pour la réponse de chacun! P>

J'ai soulevé le doute lorsque j'ai remarqué que binary.putturint code> consomme jusqu'à 10 octets pour stocker un grand uint64 code>, malgré cela Maximum uint64 code> ne doit prendre que 8 octets. P>

J'ai ensuite trouvé une réponse à mon doute dans le code source de Golang Lib: P>

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).

go

0 commentaires

4 Réponses :


1
votes

Mettez simplement: Oui, un type d'entier de taille fixe de 64 bits prendra toujours 8 octets. Ce serait une langue inhabituelle où ce n'est pas le cas.

Il existe des langues / plates-formes qui prennent en charge les types numériques de longueur variable où le stockage en mémoire est dépend de la valeur, mais vous ne spécifieriez pas le nombre de bits dans le type dans le type manière simple, comme cela peut varier.


0 commentaires

1
votes

La spécification de langue de programmation Go P>

Types numériques P>

Un type numérique représente des ensembles de valeurs entier ou à virgule flottante. Les types numériques indépendants d'architecture prédeclared sont les suivants: P>

uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

0 commentaires

12
votes

Selon http://golang.org/ref/spec#ssize_and_alignment_guaranties :

type                                 size in bytes

byte, uint8, int8                     1
uint16, int16                         2
uint32, int32, float32                4
uint64, int64, float64, complex64     8
complex128                           16


0 commentaires

0
votes

Rappelez-vous simplement la règle simple, le type de variable est généralement optimisé pour s'adapter à certains espaces de mémoire et l'espace de mémoire minimum est 1 bit (s). Et 8 bits = 1 octet (s):

donc 64 bits = 8 octets (s)


0 commentaires