ДВС, коллеги.
Пользователи моей софтины умудрились так размножить мелкие объекты, что довели бедняжку до bad_alloc (32 битная арх.).
Соответственно встала задача оптимизации потребления памяти.
Вскрытие показало, что размер объектика (честный sizeof, не глубокий) 140 байт.
Из которых 2 х 28 байт занимают 2 std::basic_string — от них я легко избавлюсь.
Но есть еще 9 x 4 = 36 байт виртуальных таблиц, и вот здесь вопрошаю совета, что с ними делать.
Желательно уменьшить размер объекта, т.к. сейчас sizeof(Bar)*instance_count > 500 Mb.
Класс выглядит следующим образом:
class Bar: public IBar1,
public IBar2,
...
public IBar9
{
int ref_count;
unsigned flags;
...
// реализация IBar1
virtual void foo1() override;
...
};
Есть ли какой-нибудь паттерн/хак, чтобы "упаковать" несколько виртуальных таблиц в одну.
Или использовать NVI + что-то?
Избавиться от IBar1 ... IBar9 тяжело, т.к. есть много зависимого кода, который их активно использует.