Для простой статистики, просто чтобы узнать, где используется вся память, вы можете добавить такой шаблон:
template<class T>
class Stats {
static int instance_count;
public:
Stats() {
instance_count++;
}
~Stats() {
instance_count--;
}
static void print() {
std::cout << instance_count << " instances of " << typeid(T).name() <<
", " << sizeof(T) << " bytes each." << std::endl;
}
};
template<class T>
int Stats<T>::instance_count = 0;
Затем вы можете добавить это как базовый класс к классам, которые, как вы подозреваете, имеют много экземпляров, и распечатать статистику текущего использования памяти:
class A : Stats<A> {
};
void print_stats() {
Stats<A>::print();
Stats<B>::print();
...
}
Это не показывает вам, в каких функциях были распределены объекты, и не дает слишком много деталей, но этого может быть достаточно, чтобы определить, где тратится память.