Определяет ли спецификация ANSI C размер int
равным размеру слова (32 бит/64 бит) системы?Размер целого числа в C
Другими словами, могу ли я расшифровать размер слова системы на основе пространства, выделенного для int
?
Определяет ли спецификация ANSI C размер int
равным размеру слова (32 бит/64 бит) системы?Размер целого числа в C
Другими словами, могу ли я расшифровать размер слова системы на основе пространства, выделенного для int
?
Размер типа int
зависит от реализации, но не может быть короче 16 бит. См. Раздел Minimum Type Limits
, раздел here.
This разработки ядра Linux сайта claims, что размер long
типа гарантированно размер слова аппарата, но это утверждение, вероятно, будет ложным: Я не мог найти каких-либо подтверждений того, что в стандарте, и long
на системах Win64 составляет всего 32 бита (поскольку в этих системах используется модель данных LLP64).
Я также не вижу явного обсуждения размеров слов. Обратите внимание, что в 64-разрядных версиях Windows есть 32-битные 'int' и' long'. Насколько я знаю, это решение соответствует стандарту C. –
@Matthew, абсолютно, я обновил свой ответ с этой информацией. –
édéric, я не имел в виду, что Windows в целом была совместима со стандартом C, только часть размера шрифта. :) Есть много других частей C99, которые они игнорируют. –
Спецификация языка рекомендует, чтобы int
должен обладать естественным «словом» для аппаратной платформы. Однако это не требуется строго. Если вы заметили, что для упрощения перехода с 32-разрядного до 64-битного кода некоторые современные реализации предпочитают поддерживать int
как 32-разрядный тип, даже если базовая аппаратная платформа имеет размер 64-битного слова.
И как уже отмечал Фредерик, в любом случае размер может быть не меньше 16 битов формирования значений.
В C99 используется фраза «натуральный размер»; в нем не упоминается слово «слово» или «размер слова». –
Вы должны проверить свой системный файл limits.h. Объявление INT_MAX должно помочь вам вернуться к вычислению того, каков минимальный размер, который должен иметь целое число. Для получения дополнительной информации см. http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
Это один из способов определить, что такое sizeof (int), но не дает кросс-платформенного комментария к вопросам (имеет ли спецификация ANSI C размер int, равный размеру слова (32 бит/64 бит) системы? Могу ли я расшифровать размер слова системы на основе пространства, выделенного для int?) –
Исходное значение int было бы размером слова - самым эффективным размером обработки данных. Тем не менее, все, что имеет тенденцию, заключается в том, что записывается огромное количество кода, предполагающих, что размер int - это X бит, а когда аппаратное обеспечение, на котором выполняется код, перемещается к большему размеру слова, небрежно написанный код сломается. Поставщики компиляторов должны держать своих клиентов счастливыми, поэтому они говорят: «Хорошо, мы оставим размер int как и раньше, но теперь мы сделаем намного больше». Или, «аххх ... слишком много людей жаловались на то, что мы сделаем длиннее больше, мы создадим длинный длинный тип, оставив sizeof (int) == sizeof (long)». Итак, в эти дни все дело в беспорядке:
Выполняет ли спецификация ANSI C размер int, равный размеру слова (32 бит/64 бит) системы?
В значительной степени идея, но она не настаивает на этом.
Другими словами, могу ли я расшифровать размер слова системы на основе пространства, выделенного для int?
Не на практике.
Единственное, что исправлено iirc - sizeof char, то есть 1 –