Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

x64 - это имя архитектуры для расширений набора команд x86, которые позволяют использовать 64-разрядный код. Изобретенный AMD и позже скопированный Intel, когда они не смогли получить свою 64-битную архитектуру, чтобы быть конкурентоспособной, Itanium не очень хорошо себя чувствовал. Другие имена для него: x86_64, оригинальное имя AMD и обычно используются в инструментах с открытым исходным кодом. И amd64, следующее название AMD и обычно используется в инструментах Microsoft. Именные имена Intel для него (EM64T и "Intel 64" ) никогда не попадались.

x32 - нечеткий термин, не связанный с аппаратным обеспечением. Он, как правило, используется для обозначения "32-битной" или "32-битной архитектуры указателей", у Linux есть ABI под этим именем.

Ответ 2

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

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

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

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

x32 - несколько недавнее дополнение. Он требует поддержки ядра (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 и Бинарный интерфейс приложения X32 System V.


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

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

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

Ответ 3

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

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

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