как сократить количество vtbl
От: qaz77  
Дата: 21.04.17 19:30
Оценка:
ДВС, коллеги.

Пользователи моей софтины умудрились так размножить мелкие объекты, что довели бедняжку до 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 тяжело, т.к. есть много зависимого кода, который их активно использует.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.