LP64, LLP64 и переход IL32

Во время перехода от 16 до 32 бит в 80-х, int был или 16 или 32 бит. Используя текущую 64-битную номенклатуру переходов, я понимаю, что было довольно равномерное распространение машин ILP32 и LP32. В то время я полагаю, что int будет всегда следовать регистру или ширине указателя для любой данной архитектуры и long останется 32-битным.

Забегая вперед на 25 лет, я вижу, что LP64 является довольно распространенным явлением, но пока я не столкнулся с 64-битными платформами [мое открытие настольного Linux в 2007 году:)], я всегда ожидал, что IP64 будет следующим логическим шагом.

  1. Было ли это (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-элементов. Есть просто фундаментальные различия в отношении числовых величин к реальностям физического мира, человеческого разума и т. Д.

Другие вопросы по тегам