LP64, LLP64 и переход IL32 - PullRequest
8 голосов
/ 24 июля 2010

Во время перехода с 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 ]

6 голосов
/ 24 июля 2010

Насколько я понимаю, Windows является чудом во всем переходе на x64.Но, оставляя это в стороне, C или C ++ никогда не определяли целочисленные типы для фиксированной длины.Я нахожу всю понятную вещь int / long / pointer, если вы посмотрите на это так:

int: в основном длиной 32 бита (Linux, Mac и Windows) длиной: 64 бита на Mac и Linux, 32в Windows long long: 64-битные в Mac, Linux и Windows x64 (u) intptr_t: точная длина указателя (32 в 32-битных, 64 в 64-битных системах)

Я использую только char вконтекст строк и никогда не используйте короткий, так как он в любом случае равен int на большинстве настольных систем.

WORD и DWORD ужасны, и их следует избегать.Если API заставляет вас использовать их, замените DWORD на DWORD_PTR, когда вы имеете дело с ... ну, с указателями.Во-первых, никогда не было правильно использовать (D) WORD ИМХО.

Я не думаю, что Windows когда-либо изменит свое решение.Слишком много проблем уже

Почему int остался позади?Почему Венера вращается в противоположном направлении?Ответ на первый вопрос найден здесь (я полагаю), второй немного сложнее;)

4 голосов
/ 24 июля 2010

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

...