Разница между архитектурами 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 - очевидно, другие не согласны).