Стандарт C99 предполагает, что тип size_t
достаточно велик для хранения размера любого объекта, поскольку он является результирующим типом оператора sizeof
.
Оператор sizeof возвращает размер (в байтах) своего операнда, который может быть выражением или именем типа в скобках. ...
Значение результата... определяется реализацией, а его тип (целочисленный тип без знака) — size_t, определенный в (и других заголовках).
Поскольку SIZE_MAX
(<limits.h>
, если я правильно помню) определяется как наибольшее значение, которое может хранить size_t
, из этого должно следовать, что самый большой объект будет иметь размер, равный SIZE_MAX
. На самом деле это было бы полезно, но, увы, кажется, что мы просим довольно много, чтобы выделить хоть четверть этого размера.
- Существуют ли какие-либо реализации, в которых вы можете фактически объявить (или иным образом выделить) объект размером
SIZE_MAX
?
Это, конечно, не совсем обычный случай... В C11 были введены необязательный тип rsize_t
и соответствующий ему макрос RSIZE_MAX
. Предполагается, что это ограничение времени выполнения, если любая стандартная функция C используется со значением больше RSIZE_MAX
в качестве аргумента rsize_t
. Кажется, это означает, что самый большой объект может быть RSIZE_MAX
байт. Однако это, похоже, также не получило широкой поддержки!
- Существуют ли какие-либо реализации, в которых существует
RSIZE_MAX
, и вы можете фактически объявить (или иным образом выделить) объект размеромRSIZE_MAX
?
SIZE_MAX
по крайней мере настолько велик, насколько может быть самый большой объект. - person Michael Burr   schedule 05.06.2015SIZE_MAX
на самом деле не говорит нам ничего полезного об объектах, но не стесняйтесь игнорировать эту часть вопроса ... и, пожалуйста, убедитесь, что раздел комментариев оставлен доступным, чтобы запросить разъяснения, а не придираться к деталям, которые не делают фактический вопрос недействительным. - person autistic   schedule 05.06.2015SIZE_MAX
(иRSIZE_MAX
) ... поскольку это ясно то, что мои вопросы задают. - person autistic   schedule 05.06.2015SIZE_MAX
до 64 КБ, поэтому любой объект мог всегда помещаться в один сегмент памяти. - person EOF   schedule 05.06.2015realloc
и определения того, когда выделение не удастся из-за огромного размера, чтобы сдаться в этот момент. - person autistic   schedule 08.06.2015short
? Также естьchar
, который IIRC является типом символов Unicode, но не цитируйте меня по этому поводу. - person autistic   schedule 05.07.2016short
,byte
иchar
, но не поддерживает ничего, что не кратно 32 битам. Переменная типаshort
представлена в среде выполнения точно так же, как переменная типаint
; единственное отличие с точки зрения языка состоит в том, что переменные типаshort
могут быть записаны вshort[]
без приведения, а сохранение значения в переменной типаshort
приведет к расширению по знаку нижней половины в верхнюю половину до того, как она будет записана. - person supercat   schedule 05.07.2016short
имеет такое же представление. Пока вы читаете спецификацию, есть ли какие-либо доказательства того, чтоObject
должно быть внутренне представлено с использованием числа, кратного 32 битам? - person autistic   schedule 06.07.2016int
,long
,float
,double
и ссылок, а также для усечения более длинных типов до более коротких и преобразованияint
илиfloat
вlong
илиdouble
соответственно. Использованиеputfield
илиputstatic
требует, чтобы значение, сохраняемое в поле типаint
,boolean
,byte
,char
илиshort
, должно было иметь типint
, в то время как значенияlong
,float
илиdouble
могут храниться только в полях соответствующих типов. . - person supercat   schedule 06.07.2016