Intereting Posts
Как захватить весь локальный запрос HTTP и извлечь URL-адрес с помощью c? Webkit GTK: определение того, когда документ будет загружен Как сохранить переменную в определенной ячейке памяти? Каков самый быстрый способ подсчета строк и слов в текстовом файле в ANSI C? Почему «для (i = 0,1; i! = 1,0; i + = 0,1)» не нарушается при i = 1,0? Библиотека C нуждается в C, которая реализует заданные операции Чтение текстового файла и выходное количество слов, отдельных слов и наиболее часто используемых слов Как выделить память для массива символов c-string? Лучший способ проверить, не массив символов C указатель void указателя на указатель функции Получение диаграммы streamа управления из кода ANSI C glibc, возможный состояние гонки между закрытием FILE * во время выхода? Независимое от платформы хранилище целых чисел со знаком выделение массива внутри функции ac Ошибка JNI-unpinned primitve array

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

Я знаю, что в C возвращаемый тип оператора sizeof равен size_t который представляет собой целочисленный тип без знака, определенный в . Это означает, что максимальный размер должен быть 65535 как указано в стандарте C99 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 

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

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

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

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

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

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

 #define SIZE_T_MAX size_t(0xffffffffffffffffULL) 

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