Hardabi
Что такое ABI и почему его нарушение проблема?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
ABI (Application Binary Interface) — бинарный интерфейс: calling conventions, name mangling, layout структур (с padding), vtable layout, exception handling. Если ABI стабилен — объектники от разных версий компилятора линкуются.
// Нарушение ABI: добавили поле в середину структуры
struct Config { // v1.0
int a;
int b;
}; // sizeof == 8
struct Config { // v1.1 — ABI-БРЕЙК
int a;
int new_field; // сместило b!
int b;
}; // sizeof == 12
// Защита ABI через pimpl (скрытая реализация)
class Widget {
struct Impl;
std::unique_ptr<Impl> pimpl_; // sizeof стабильный
public:
void doStuff();
};C++ ABI хрупкий, поэтому библиотеки экспортируют C-интерфейс (extern "C") или используют pimpl. C ABI стабилен десятилетиями.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.