ABI - это сокращение от Application Binary Interface. В C++ ABI описываются подробности на двоичном уровне, которые не специфицируются в Стандарте. Стандарт описывает общее поведение, но не говорит как оно должно быть реализовано. Например, в Стандарте говорится как должны себя вести виртуальные функции, но на реализации этого поведения через виртуальные таблицы никто не настаивает.
Как будут располагаться в памяти классы, как виртуальные таблицы, передача параметров, реализация RTTI и т.п. - все это описывается в ABI.
Если два компилятора на одной и тоже же платформе будут следовать разным ABI, то не будет совместимости на уровне двоичного кода, нельзя будет код от двух компиляторов слинковать, например.
Какого-то единого C++ ABI нет, хотя бы потому, что оно зависит от платформы. Есть попытки как-то все более-менее стандартизовать, например есть C++ ABI для Итаниумов и gcc его поддерживает с версии 3.2. Потом они реализацию этого ABI еще правили некоторое время. В итоге были проблемы с совместимостью скомпилированного кода, народ с gcc после смены ABI ругался на проблемы при линковке.
Комментариев нет:
Отправить комментарий