Mediuminlining

Что такое inlining и когда компилятор его применяет?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Inlining — подстановка тела функции в место вызова: устраняет overhead (call/return/args) и даёт оптимизатору больший контекст (constant propagation, dead code elimination). Компилятор инлайнит по эвристикам (размер, hotness через PGO).

inline int square(int x) { return x * x; }          // рекомендация + ODR
__attribute__((always_inline)) int fast() { ... }    // принудительно
__attribute__((noinline)) int slow() { ... }         // запретить
  • LTO (-flto) — инлайн через границы TU;
  • virtual вызовы не инлайнятся (если не devirtualized);
  • PGO даёт статистику hot-функций — лучше инлайнит.

Чрезмерный inline раздувает код (instruction cache misses) — нужен баланс.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.