Разница между архитектурами x86, x32 и x64? - PullRequest
46 голосов
/ 03 октября 2011

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

Ответы [ 3 ]

27 голосов
/ 19 сентября 2015

Ответы Ханса и 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 или выше. На вики-странице Debian X32 Port есть вся информация. Трехсекундный тур: (1) включить X32 в ядре при загрузке; (2) используйте debootstrap для установки среды chroot X32 и (3) chroot debian-x32 для входа в среду и тестирования своего программного обеспечения.

25 голосов
/ 03 октября 2011

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 (EM64T и Intel 64) никогда не завоевывали популярность.

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

7 голосов
/ 03 октября 2011

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

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

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

...