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