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 подскажет развёрнутый ответ в реальном времени.