2010-11-21 2 views
2

Определяет ли спецификация ANSI C размер int равным размеру слова (32 бит/64 бит) системы?Размер целого числа в C

Другими словами, могу ли я расшифровать размер слова системы на основе пространства, выделенного для int?

+0

Единственное, что исправлено iirc - sizeof char, то есть 1 –

ответ

6

Размер типа int зависит от реализации, но не может быть короче 16 бит. См. Раздел Minimum Type Limits, раздел here.

This разработки ядра Linux сайта claims, что размер long типа гарантированно размер слова аппарата, но это утверждение, вероятно, будет ложным: Я не мог найти каких-либо подтверждений того, что в стандарте, и long на системах Win64 составляет всего 32 бита (поскольку в этих системах используется модель данных LLP64).

+0

Я также не вижу явного обсуждения размеров слов. Обратите внимание, что в 64-разрядных версиях Windows есть 32-битные 'int' и' long'. Насколько я знаю, это решение соответствует стандарту C. –

+0

@Matthew, абсолютно, я обновил свой ответ с этой информацией. –

+0

édéric, я не имел в виду, что Windows в целом была совместима со стандартом C, только часть размера шрифта. :) Есть много других частей C99, которые они игнорируют. –

3

Спецификация языка рекомендует, чтобы int должен обладать естественным «словом» для аппаратной платформы. Однако это не требуется строго. Если вы заметили, что для упрощения перехода с 32-разрядного до 64-битного кода некоторые современные реализации предпочитают поддерживать int как 32-разрядный тип, даже если базовая аппаратная платформа имеет размер 64-битного слова.

И как уже отмечал Фредерик, в любом случае размер может быть не меньше 16 битов формирования значений.

+0

В C99 используется фраза «натуральный размер»; в нем не упоминается слово «слово» или «размер слова». –

0

Вы должны проверить свой системный файл limits.h. Объявление INT_MAX должно помочь вам вернуться к вычислению того, каков минимальный размер, который должен иметь целое число. Для получения дополнительной информации см. http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html

+1

Это один из способов определить, что такое sizeof (int), но не дает кросс-платформенного комментария к вопросам (имеет ли спецификация ANSI C размер int, равный размеру слова (32 бит/64 бит) системы? Могу ли я расшифровать размер слова системы на основе пространства, выделенного для int?) –

1

Исходное значение int было бы размером слова - самым эффективным размером обработки данных. Тем не менее, все, что имеет тенденцию, заключается в том, что записывается огромное количество кода, предполагающих, что размер int - это X бит, а когда аппаратное обеспечение, на котором выполняется код, перемещается к большему размеру слова, небрежно написанный код сломается. Поставщики компиляторов должны держать своих клиентов счастливыми, поэтому они говорят: «Хорошо, мы оставим размер int как и раньше, но теперь мы сделаем намного больше». Или, «аххх ... слишком много людей жаловались на то, что мы сделаем длиннее больше, мы создадим длинный длинный тип, оставив sizeof (int) == sizeof (long)». Итак, в эти дни все дело в беспорядке:

Выполняет ли спецификация ANSI C размер int, равный размеру слова (32 бит/64 бит) системы?

В значительной степени идея, но она не настаивает на этом.

Другими словами, могу ли я расшифровать размер слова системы на основе пространства, выделенного для int?

Не на практике.

Смежные вопросы