HardООПоптимизация
Что такое пустой базовый класс (empty base) optimization?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
EBO (Empty Base Optimization): по стандарту каждый объект имеет ненулевой размер (даже пустой класс struct Empty {}; имеет sizeof == 1, чтобы адреса различались). Но при наследовании от пустой базы компилятор может не увеличивать размер производного.
struct Empty {}; // sizeof == 1
struct WithMember : Empty {
int x; // sizeof == 4 (база "растворилась")
};
// Без EBO каждый vector нёс бы лишний байт от stateless allocator
template<class T, class Alloc = std::allocator<T>>
class vector { /* Alloc как пустая база — 0 overhead */ };- Важно для stateless policy/mixin/allocator — без EBO контейнеры становились бы больше;
- EBO реализуют основные компиляторы, но стандарт не гарантирует для всех случаев;
- В C++20 часть ограничений сняли, EBO работает в большинстве сценариев.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.