LP64, LLP64 и переход IL32
Во время перехода от 16 до 32 бит в 80-х, int
был или 16 или 32 бит. Используя текущую 64-битную номенклатуру переходов, я понимаю, что было довольно равномерное распространение машин ILP32 и LP32. В то время я полагаю, что int
будет всегда следовать регистру или ширине указателя для любой данной архитектуры и long
останется 32-битным.
Забегая вперед на 25 лет, я вижу, что LP64 является довольно распространенным явлением, но пока я не столкнулся с 64-битными платформами [мое открытие настольного Linux в 2007 году:)], я всегда ожидал, что IP64 будет следующим логическим шагом.
- Было ли это (LP64) ожидаемой эволюцией для 64 бит?
- Как работает
char <= short <= int <= long
отношения вписываются в эту появляющуюся схему фиксации целочисленного типа для каждой платформы, которую мы оставляем позади? - Как эти схемы перехода связаны с использованием (ваш выбор
{l,u}case
)WORD
/DWORD
на разных платформах? - Некоторые области Windows по-прежнему содержат
INT
формы, которые 16 бит. Вырастет ли Windows из LLP64 или уже слишком поздно? - Почему
int
выбрал оставить позади это время, в отличие от 32-битного перехода?
- Как работает
2 ответа
Насколько я понимаю, Windows является чудом во всем переходе на x64. Но, оставляя это в стороне, C или C++ никогда не определяли целочисленные типы для фиксированной длины. Я нахожу всю вещь int/long/pointer вполне понятной, если вы посмотрите на это так:
int: длиной в основном 32 бита (Linux, Mac и Windows) длиной: 64 бита для Mac и Linux, 32 длиной для Windows: 64-бит для Mac, Linux и Windows x64 (u)intptr_t: точная длина указателя (32 на 32-битных, 64 на 64-битных системах)
Я использую только char в контексте строк и никогда не использую short, так как в любом случае он равен int на большинстве настольных систем.
СЛОВО и DWORD безобразны, и их следует избегать. Если API заставляет вас использовать их, замените DWORD на DWORD_PTR, когда вы имеете дело с... ну, с указателями. Никогда не было правильно использовать (D)WORD там, в первую очередь ИМХО.
Я не думаю, что Windows когда-либо изменит свое решение. Слишком много проблем уже
Почему int остался позади? Почему Венера вращается в противоположном направлении? Ответ на первый вопрос находится здесь (я полагаю), второй немного сложнее;)
Вместо того, чтобы смотреть на это как int
Будучи "оставленным позади", я бы сказал, что вы должны смотреть на это с точки зрения невозможности оставить позади любой тип размера, который может понадобиться. Я полагаю, компиляторы могли бы определить int32_t
с точки зрения некоторого внутреннего __int32_t
тип расширения, но с C99 все еще не поддерживается широко, приложениям было бы очень трудно обойтись без пропусков int32_t
определения, когда их системы сборки не могли найти 32-битный тип среди стандартных типов. И иметь 32-битный тип очень важно, независимо от того, какой у вас размер собственного слова (например, это единственный правильный тип для значений кодовой точки Unicode).
По той же причине было бы невозможно short
32-разрядный и int
64-битный: 16-битный тип важен для многих вещей, обработка звука - первое, что приходит на ум. (Не говоря уже о безобразной одержимости UTF-16 в Windows / Java..)
На самом деле, я не думаю, что переходы с 16 на 32 бита и с 32 на 64 бита вообще сопоставимы. Оставив позади 16-битную систему, мы оставили систему, в которой большинство чисел, встречающихся в обычной повседневной жизни, не вписывается в базовый тип, и где хаки, такие как "дальние" указатели, должны были использоваться для работы с нетривиальными наборами данных. С другой стороны, большинство приложений имеют минимальную потребность в 64-битных типах. Крупные денежные показатели, размеры / смещения файлов мультимедиа, позиции дисков, высокопроизводительные базы данных, доступ к большим файлам с отображением в памяти и т. Д. - это некоторые специализированные приложения, которые приходят на ум, но нет оснований полагать, что текстовому процессору когда-нибудь понадобится миллиарды символов или что веб-странице понадобятся миллиарды HTML-элементов. Есть просто фундаментальные различия в отношении числовых величин к реальностям физического мира, человеческого разума и т. Д.