Это обширная тема еще, чтобы дать вам некоторые указатели:
ЛПИ (двоичный интерфейс приложения) покрывают детали, которые должны быть определены для того, чтобы приложение может работать по определенной системе (обычно с операционной системой). Таким образом, чтобы добраться до примеров:
- размеров типов данных (например, стандарт C дает только минимальные требования к типам INT тип должен, по крайней мере, столь же большой, как короткие, и короткий должен быть 16 битами.).
- компоновка в памяти структур и битовых полей
- соглашение о вызовах (когда функция вызывается, где он может найти это параметры, которые в регистрах, которые в стеке и т.д.)
- стека кадра (то, что он присутствует в стеке, полезно для отладчика)
- номера системных вызовов
- другие
В принципе любая деталь, которая должна быть известна, чтобы построить программу, которая работает вместе с некоторыми другими компонентами (библиотеки, ОС) могут быть включены в ABI. Некоторые ABI указывают больше, а некоторые указывают меньше деталей.
Архитектура оборудования также может рассматриваться как спецификация, но даже более низкого уровня (речь идет не о программном обеспечении, а не о программном обеспечении). Аппаратная архитектура определяет такие вещи, как набор инструкций, иерархия памяти и способы доступа к периферийным устройствам. Для одной аппаратной архитектуры могут быть разные ABI-ы. Также вы можете иметь один и тот же ABI для множественной (но обычно подобной) аппаратной архитектуры.