Когда мы пишем программы на C++, мы хотим, чтобы они работали быстро и использовали поменьше памяти. Оказывается, даже пустые классы могут помочь нам в этом! В этой статье разберем, что такое Empty Base Optimization (EBO) — оптимизация пустых базовых классов — и как она делает программы эффективнее. Для начала разберемся с главным понятием. Пустой класс — это класс, у которого нет никаких данных внутри. Например: struct Empty { // Здесь нет переменных-членов }; Казалось бы, раз класс пустой, он не должен занимать память. Но в C++ есть важное правило: каждый объект должен иметь уникальный адрес. Поэтому даже пустой объект занимает минимум 1 байт (чтобы у него был адрес). Empty e; std::cout << sizeof(e); // Выведет 1 (на большинстве компиляторов) А теперь самое интересное. Когда мы используем пустой класс как базовый (то есть наследуемся от него), компилятор может "схитрить" и не выделять для него отдельную память. struct Empty {}; struct Derived : Empty { int x; // 4 байта };
Идиома Empty Base Optimization в C++: Как пустые классы помогают экономить память
4 марта4 мар
1
3 мин