Ответы Ханса и 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
для входа в среду и тестирования своего программного обеспечения.