Максимальный размер 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
Просьба помочь мне понять, почему есть какая-то разница или причина моего неправильного толкования.
Ответы
Ответ 1
В стандарте указано, что SIZE_MAX
должно быть не менее 65535.
Он не указывает верхнюю границу, и реализация gcc совершенно верна.
Цитирование ссылки, которую вы указали (выделено мной):
Значение, определяемое реализацией, должно быть равно или больше по величине (по абсолютной величине), чем соответствующее значение, приведенное ниже, с тем же знаком.
Ответ 2
Я бы предложил список самых больших (без знака) в настоящее время:
#define SIZE_T_MAX size_t(0xffffffffffffffffULL)
Это должно дать соответствующие результаты для 32-битной и 64-битной компиляции.