Подтвердить что ты не робот

Максимальный размер size_t

Я знаю, что в C возвращаемый тип оператора sizeof size_t является неподписанным целым числом, определенным в <stdint.h>. Это означает, что максимальный размер должен быть 65535, как указано в C99 standard 7.18.3:

limit of size_t
  SIZE_MAX             65535

Однако в gcc-4.8.2 заголовочный файл stdint.h определил свой размер намного больше, чем 65535, противоречащий тому, который указан в стандарте C99, как показано ниже,

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

Просьба помочь мне понять, почему есть какая-то разница или причина моего неправильного толкования.

4b9b3361

Ответ 1

В стандарте указано, что SIZE_MAX должно быть не менее 65535.

Он не указывает верхнюю границу, и реализация gcc совершенно верна.

Цитирование ссылки, которую вы указали (выделено мной):

Значение, определяемое реализацией, должно быть равно или больше по величине (по абсолютной величине), чем соответствующее значение, приведенное ниже, с тем же знаком.

Ответ 2

Я бы предложил список самых больших (без знака) в настоящее время:

#define SIZE_T_MAX size_t(0xffffffffffffffffULL)

Это должно дать соответствующие результаты для 32-битной и 64-битной компиляции.