How to find the memory used by any object

c++, memory-management, stl

Solution

If you are looking for the full memory usage of an object, this can't be solved in general in C++ - while we can get the size of an instance itself via `sizeof()`, the object can always allocate memory dynamically as needed.

If you can find out how big the individual element in a container are, you can get a lower bound:

size = sizeof(map<type>) + sum_of_element_sizes;

Keep in mind though that the containers can still allocate additional memory as an implementation detail and that for containers like `vector` and `string` you have to check for the allocated size.

Problem

``` class Help { public: Help(); ~Help(); typedef std::set<string> Terms; typedef std::map<string, std::pair<int,Terms> > TermMap; typedef std::multimap<int, string, greater<int> > TermsMap; private: TermMap terms; TermsMap termsMap; }; ``` How can we find the memory used (in bytes) by the objects `term` and `termsMap`. Do we have any library ?

Original source