Разница между архитектурами x86, x32 и x64?

Пожалуйста, объясните разницу между x86, x32 а также x64? Это немного сбивает с толку, когда дело доходит до x86 а также x32 потому что большую часть времени 32-битные программы работают на x86...

3 ответа

Решение

x86 относится к архитектуре процессора Intel, которая использовалась в ПК. Номера моделей были 8088 (8-битная версия шины 8086 и использовалась в первом IBM PC), 8086, 286, 386, 486. После этого они переключались на имена вместо номеров, чтобы AMD не копировала имена процессоров. Pentium и т. Д., Никогда не Hexium:).

x64- это имя архитектуры для расширений набора команд x86, которые включают 64-битный код. Изобретенный AMD, а затем скопированный Intel, когда им не удалось добиться конкурентоспособности собственной 64-битной арки, Itanium не очень хорошо себя чувствовал. Другие названия для этого - x86_64, оригинальное имя AMD и обычно используется в инструментах с открытым исходным кодом. И amd64, следующее название AMD и широко используемый в инструментах Microsoft. Intel's own names for it (EM64T and "Intel 64") never caught on.

x32 is a fuzzy term that's not associated with hardware. It tends to be used to mean "32-bit" or "32-bit pointer architecture", Linux has an ABI by that name.

Ответы Ханса и DarkDust были посвящены i386/i686 и amd64/x86_64, поэтому пересматривать их нет смысла. Этот ответ будет посвящен X32 и предоставит некоторую информацию, изученную после порта X32.

x32- это ABI для процессоров amd64/x86_64, использующих 32-битные целые, длинные и указатели. Идея состоит в том, чтобы объединить меньший объем памяти и кеша из 32-битных типов данных с большим набором регистров x86_64. (Ссылка: Страница порта Debian X32).

x32 может обеспечить до 30% сокращения использования памяти и до 40% увеличения скорости. Варианты использования для архитектуры:

  • хостинг vserver (с привязкой к памяти)
  • нетбуки / планшеты (низкая память, производительность)
  • научные задачи (выполнение)

х32- это недавнее дополнение. Требуется поддержка ядра (3.4 и выше), поддержка дистрибутива (см. Ниже), поддержка libc (2.11 или выше) и GCC 4.8 и выше (улучшена поддержка префиксов размера адреса).

Для дистрибутивов он был доступен в Ubuntu 13.04 или Fedora 17. Для поддержки ядра требуется только указатель в диапазоне от 0x00000000 до 0xffffffff. Из двоичного интерфейса приложений System V, AMD64 (с моделями программирования LP64 и ILP32), раздел 10.4, с. 132 (это единственное предложение):

10.4 Поддержка ядра
Ядро должно ограничить стек и адреса, возвращаемые системными вызовами, в диапазоне от 0x00000000 до 0xffffffff.

При загрузке ядра с поддержкой вы должны использовать syscall.x32=y вариант. При сборке ядра вы должны включить CONFIG_X86_X32=y вариант. (Ссылка: страница Debian X32 Port и двоичный интерфейс приложения X32 System V).


Вот кое-что из того, что я узнал в недавнем порте после того, как ребята из Debian сообщили о нескольких ошибках на нас после тестирования:

  • система очень похожа на X86
  • препроцессор определяет __x86_64__ (и друзья) и __ILP32__, но нет __i386__/__i686__ (и друзья)
  • вы не можете использовать __ILP32__ один, потому что он неожиданно обнаруживается в Clang и Sun Studio
  • при взаимодействии со стеком необходимо использовать 64-битные инструкции pushq а также popq
  • как только регистр заполнен / сконфигурирован из 32-битных типов данных, вы можете выполнять над ними 64-битные операции, например adcq
  • будьте осторожны с расширением 0, которое встречается в старших 32-битных символах.

Если вы ищете тестовую платформу, вы можете использовать Debian 8 или выше. На их вики-странице в Debian X32 Port есть вся информация. Трехсекундный тур: (1) включить X32 в ядре при загрузке; (2) использовать debootstrap установить среду chroot X32 и (3) chroot debian-x32 войти в среду и протестировать ваше программное обеспечение.

x86 означает, что Intel 80x86 совместим. Раньше он включал 8086, 16-битный процессор. В настоящее время это примерно означает любой процессор с 32-битным набором команд, совместимым с Intel (обычно что-нибудь от Pentium и далее). Никогда не читал x32 использовался.

x64 означает процессор, который x86 совместим, но также имеет 64-битный режим (чаще всего подразумевается набор 64-битных инструкций, представленный AMD; идея Intel о 64-битном режиме была совершенно глупой, и, к счастью, Intel признала это и теперь использует вариант AMD).

Поэтому большую часть времени вы можете упростить это следующим образом: x86 совместима ли Intel в 32-битном режиме, x64 совместим с Intel в 64-битном режиме.

Поскольку 64-битная версия является x86 архитектуры и соответственно впервые был назван x86-64, это было бы наиболее подходящее имя, ИМО. Также, x32 - это вещь (как упоминалось ранее) - "x64", однако, не является продолжением этого, как и (теоретически) ошибочная информация (даже если многие люди будут знать, о чем вы говорите), и поэтому ее следует рассматривать только как маркетинговую вещь, а не "официальная" архитектура (опять же, IMO - очевидно, другие не согласны).

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