I am working on an application in which I am planning to use couple of STL containers. The application will take certain steps if memory consumption reaches a threshold. For that purpose I need to perform a close to accurate calculation on how much memory is used by STL containers.
vector<string> StringList
map<string, int> mapstring
This is how I am estimating memory:
For size of StringList
, loop over all the elements of the vector and keep adding the string sizes.
string size = sizeof(string) + string.capacity()*sizeof(char)
Then finally add to this sizeof(StringList);
For size of mapstring, loop over all the keys of the container and keep adding the string sizes and then add the sizes of int which is mapstring.size()*sizeof(int)
. Then finally add to this sizeof(mapstring);
I guess a better approach would be specifying own allocator class and keeping track of memory usage inside it but writing one could be non-trivial. Does this estimation look good ?