Как мы можем найти используемую память (в
байт) по сроку объектов и
termsMap. У нас есть какая-нибудь библиотека?
Вы должны использовать свой собственный тип распределителя.
typedef std::set<string,
your_allocator_1_that_can_count_memory_consumption_t> Terms;
typedef std::map<string, std::pair<int,Terms>,
your_allocator_2_that_can_count_memory_consumption_t> TermMap;
typedef std::multimap<int, string, greater<int>,
your_allocator_3_that_can_count_memory_consumption_t> TermsMap;
Я еще не проверил эту идею для std :: string, поэтому, если это трудно реализовать, просто используйте свой собственный класс fixed_string, который просто оборачивает char s [max-string-lenght].
А когда вам нужно, чтобы в вашей программе выяснилось потребление памяти, просто получите его из your_allocator_1_that_can_counts_memory_consumption_t
, your_allocator_2_that_can_counts_memory_consumption_t
,
your_allocator_3_that_can_counts_memory_consumption_t
.
Отредактировано
Для UncleBens я хочу уточнить мою точку зрения.
Насколько я понимаю вопрос об ARV, необходимо знать, сколько памяти выделено для set :: set и std :: map, включая всю память, выделенную для элементов набора и карты. Так что это не просто sizeof (условия).
Так что я просто предложил очень простой распределитель. Не вдаваясь в подробности, это может выглядеть так:
template <class T>
class your_allocator_1_that_can_counts_memory_consumption_t {
public:
// interfaces that are required by the standart
private:
std::allocator<T> std_allocator_;
// here you need to put your variable to count bytes
size_t globale_variable_for_allocator_1_to_count_bytes_;
};
Этот распределитель просто подсчитывает количество выделенных и освобожденных байтов, а для реального распределения и освобождения используется его член std_allocator_. Мне может понадобиться отладить его в gdb, чтобы установить точку останова для malloc () и free (), чтобы убедиться, что каждое выделение и освобождение фактически проходят через мой распределитель.
Буду признателен, если вы укажете мне на некоторые проблемы с этой идеей, поскольку я уже реализовал ее в своей программе, работающей на Windows, Linux и HP-UX, и я просто спрашиваю свои распределители, чтобы узнать, сколько памяти у каждого из моих контейнеров использовать.