Изменения в размерах классификаторов на разных платформах / системах

0

Я довольно долго программировал на C и C++, а в ночное время я узнал об изменениях в размерах различных фундаментальных типов данных на платформах и системных архитектурах. Как и в C++, стандарт заявил, что размер int должен быть как минимум 2 байта (или равен или больше short... я точно не помню). Я знаю, что он будет меняться и может увеличиваться по мере продвижения вперед.

Единственное, что я не мог наблюдать, это изменение размеров классификаторов, таких как short, long (и, возможно, long long). Они были одинаковыми в разных компиляторах и операционных системах, хотя типы данных росли в размерах и иногда были равны по размеру с их длинными версиями.

Просто из любопытства, есть ли какие-либо примеры в настоящем, где эти квалификаторы обладают большей пропускной способностью или просто фиксируются по размеру?

  • 0
    Не совсем понятно, о чем ты спрашиваешь. Ты имеешь в виду, что когда-то long было обычно 32 бита, а сейчас часто 64?
  • 0
    @MikeSeymour Да. Я видел, как размеры int перепрыгивали до 32 бит при переходе от старого компилятора Turbo C ++ к новому. Но я никогда не видел размер long изменения. Я использую Windows и использую разные компиляторы, но никогда не видел, чтобы long стал 64-битным (что long long уже).
Показать ещё 4 комментария
Теги:

2 ответа

2
Лучший ответ

На самом деле они не "отборочные". Они наполовину описывают разные типы. short int - это другой тип от int. То же самое с long int vs int. Легко ввести в заблуждение тот факт, что (например) спецификатор простого типа " long " разрешает тип long int (C++ 11 Table 10) как форму синтаксического сахара. Но правила для размеров типов применяются к результирующим типам после этого разрешения; он никогда не определяется с точки зрения short/long ключевых слов.

И да, размеры этих типов были изменены, как и более знакомые типы; например, long int составляет 4 байта в современной 64-битной Visual C++, но 8 байтов в современном 64-битном GCC.

  • 0
    Но long , short , unsigned и т. Д. Не являются типами данных. Они могут быть привязаны к любому другому фундаментальному типу данных, верно? Кроме того, есть ли способ специально выделить размеры для фундаментального типа данных? Предположим, что int составляет 6 байтов в системе. Есть ли способ создать int произвольного размера от 2 до 6 байтов? Это будет проблемой?
  • 1
    @SangeethSudheer: сами по себе ключевые слова - нет, но когда они используются в качестве целого спецификатора типа , они «сокращают» полный тип, например long int , short int , unsigned int (Таблица 10), и они, безусловно, являются типы данных. Вы можете считать long по себе синтаксическим сахаром для long int . Там нет "обвязки", как таковой. Как ключевые слова , да, они «привязаны», как описано в 7.1.6 / 2, чтобы сформировать полные типы. Все это означает, что вы хотите говорить о полных типах, а не об отдельных ключевых словах. Значение short / long / unsigned не изменилось и никогда не изменится.
Показать ещё 3 комментария
3

Есть, конечно, примеры: я знаю системы (не все современные), где int - 16, 32, 36 и 48 бит; Я думаю, что были случаи, когда это было 24 бит или 60 бит (но это были бы действительно старые машины), и, возможно, некоторые другие значения. И я фактически работал на машине, где int* был 16 бит, но char* 32 (но это было довольно давно).

Конечно, многие из этих машин вы вряд ли увидите сегодня, если вы не работаете с встроенными системами или мэйнфреймами. (Я думаю, что у многих встроенных процессоров по-прежнему имеется 16 бит int.) С другой стороны, даже на обычных настольных компьютерах или ноутбуках long может быть либо 32 бита (Windows и 32-битный Mac и Linux)), либо 64 бит (64 бит Mac или Linux).

  • 0
    Итак, вы говорите так же, как int и другие типы данных имеют большие размеры на некоторых платформах, long , short и другие также различаются, и это действительно то, о чем я хочу знать. Я знаю, что сам тип данных имеет разные размеры на разных архитектурах, но я хочу знать, меняются ли эти «классификаторы».
  • 0
    @SangeethSudheer больше или меньше. Минимальные гарантированные значения - 8 бит для char , 16 для short и int , 32 для long и 64 для long long . И ничего больше. (Также нет гарантии, что система будет использовать дополнение 2, и есть мэйнфреймы, которые этого не делают.)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню