x32 ABI — это двоичный интерфейс приложения (ABI) и один из интерфейсов ядра Linux . x32 ABI предоставляет 32-битные целые числа, длинные числа и указатели (ILP32) на 64-битном оборудовании Intel и AMD. ABI позволяет программам использовать преимущества набора инструкций x86-64 (большее количество регистров ЦП , лучшая производительность с плавающей запятой, более быстрый позиционно-независимый код , общие библиотеки , параметры функций, передаваемые через регистры, более быстрая инструкция системного вызова ) при использовании 32-битные указатели и, таким образом, позволяют избежать накладных расходов, связанных с 64-битными указателями. [1] [2] [3]
Хотя x32 ABI ограничивает программу виртуальным адресным пространством в 4 ГиБ, он также уменьшает объем памяти , занимаемой программой, за счет уменьшения указателей. Это может позволить ему работать быстрее за счет размещения в кэше большего количества кода и данных . [1] [2] [3] Наилучшие результаты во время тестирования были получены при использовании теста 181.mcf SPEC CPU 2000, в котором версия ABI x32 была на 40% быстрее, чем версия x86-64. [3] [4] В среднем x32 работает на 5–8% быстрее в целочисленных тестах процессора SPEC по сравнению с x86-64. В тестах SPEC CPU с плавающей запятой нет преимущества в скорости по сравнению с x86-64. [5] Также существуют тесты приложений, демонстрирующие преимущества x32 ABI. [6] [7]
Запуск пользовательского пространства, состоящего в основном из программ, скомпилированных в режиме ILP32 и которые также имеют основной доступ к 64-битным инструкциям ЦП, не является чем-то необычным, особенно в области «классических RISC» микросхем. Например, операционная система Solaris делает это как для SPARC , так и для x86-64. Что касается Linux , Debian также предоставляет пользовательское пространство ILP32. Основная причина заключается в несколько «более дорогой» природе кода LP64 , [8] точно так же, как это было показано для x86-64. В этом отношении x32 ABI расширяет концепцию ILP32-on-64bit на платформу x86-64.
Несколько человек обсуждали преимущества x86-64 ABI с 32-битными указателями за годы, прошедшие с момента выпуска Athlon 64 в 2003 году, в частности Дональд Кнут в 2008 году. [9] Публично заметного прогресса в реализации такого режима было мало. до 27 августа 2011 года, когда Ханс Петер Анвин объявил в списке рассылки ядра Linux , что он и HJ Lu работают над x32 ABI. [10]
В тот же день Линус Торвальдс выразил обеспокоенность тем, что использование 32-битных значений времени в x32 ABI может вызвать проблемы в будущем. [11] [12] Это связано с тем, что использование 32-битных значений времени может привести к переполнению значений времени в 2038 году . [11] [12] Следуя этому запросу, разработчики x32 ABI изменили значения времени на 64-битные. [13]
Презентация на конференции Linux Plumbers Conference 7 сентября 2011 г. была посвящена x32 ABI. [2]
ABI x32 был объединен с ядром Linux для версии 3.4, а поддержка была добавлена в библиотеку GNU C в версии 2.16. [14]
В декабре 2018 года обсуждался вопрос о прекращении поддержки x32 ABI, чего не произошло по состоянию на апрель 2023 года. [15]