web-dev-qa-db-fra.com

Taille maximale de size_t

Je sais que dans C, le type de retour de l'opérateur sizeof est size_t étant un type entier non signé défini dans <stdint.h>. Ce qui signifie que sa taille maximale doit être 65535 comme indiqué dans C99 standard 7.18. :

limit of size_t
  SIZE_MAX             65535

Cependant dans gcc-4.8.2 En tête de fichier stdint.h a défini sa taille bien plus que 65535 contredisant ce qui est indiqué dans C99 standard comme indiqué ci-dessous,

/* Limit of `size_t' type.  */
# if __WORDSIZE == 64
#  define SIZE_MAX              (18446744073709551615UL)
# else
#  define SIZE_MAX              (4294967295U)
# endif

Veuillez m'aider à comprendre pourquoi il y a une différence ou une raison derrière ma mauvaise interprétation.

34
Sunil Bojanapally

La norme dit que SIZE_MAX doit être au moins 65535.

Il ne spécifie aucune limite supérieure et l'implémentation de gcc est parfaitement valide.

Citant la référence que vous avez citée (non souligné dans l'original):

Sa valeur définie par l'implémentation doit être égale ou supérieure en magnitude (valeur absolue) à la valeur correspondante indiquée ci-dessous, avec le même signe.

46
Keith Thompson