Запутаться с ABI соглашение о вызовах и арки
Я путаюсь со всеми этими терминами:
ABI, соглашение о вызовах и аппаратная архитектура.
ABI является связью с архитектурой: x86-64 имеют другой ABI, чем i386. Но тогда вы также можете определить свое собственное соглашение о вызовах cdecl...
Ну так какова связь между всеми этими понятиями? Какой из них определяет другой?
В основном я думаю, что я путаю с ABI. Что вы вкладываете в деталь из соглашения о вызовах?
Спасибо
1 ответ
Это обширная тема, которая еще даст вам несколько советов:
ABI (двоичный интерфейс приложения) охватывает детали, которые необходимо указать, чтобы приложение могло работать в определенной системе (обычно с операционной системой). Итак, чтобы добраться до примеров:
- размеры типов данных (например, стандарт C задает минимальные требования к типам. Тип int должен быть по крайней мере таким же большим, как short, а short должен составлять 16 бит).
- расположение в памяти структур и битовых полей
- соглашение о вызовах (когда функция вызывается там, где она может найти свои параметры, которые в регистрах, которые в стеке и т. д.)
- кадр стека (то, что присутствует в стеке, полезно для отладчика)
- номера системных вызовов
- другие
В принципе, в ABI может быть включена любая деталь, которую необходимо знать, чтобы построить программу, которая работает вместе с некоторыми другими компонентами (библиотеками, ОС). Некоторые ABI указывают больше, а некоторые указывают меньше деталей.
Аппаратная архитектура также может рассматриваться как спецификация, но еще более низкого уровня (речь идет об аппаратном обеспечении, а не о программном обеспечении). Аппаратная архитектура определяет такие вещи, как доступный набор команд, иерархию памяти и способы доступа к периферийным устройствам. Для одной аппаратной архитектуры могут быть разные ABI-ы. Также вы можете иметь один и тот же ABI для нескольких (но обычно похожих) аппаратных архитектур.