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
For std::vector
and std::string
, capacity, rather than size, would
be a better approximation. For node based containers (std::set
,
etc.), you'd want multiply the number of nodes (roughly the number of
elements) times the size of each node. This only accurate, however, if
the allocator doesn't use an optimized pool allocator for the nodes.
If you really want to know how much memory is being used, however, a
better strategy would be to replace the global operator new
and
operator delete
, and keep track of the actual allocations. Even more
accurate would be to replace malloc
and free
. Formally, this is not
allowed, but in practice, I've never encountered an implementation where
it doesn't work. On the other hand, if you replace malloc
and free
,
you have to implement the actual memory management yourself. If you
replace operator new
and operator delete
, you can use malloc
and
free
, which makes it fairly trivial.
Note too that each allocation has some fixed overhead. A 100000 allocations of 10 bytes each will consume significantly more memory than 10 allocations of 100000 bytes each.