我正在开发一个应用程序,计划使用几个STL容器。如果内存占用达到一定阈值,应用程序将执行某些步骤。为此,我需要对STL容器使用的内存进行接近精确的计算。
vector<string> StringList
map<string, int> mapstring
这是我估算内存的方法:
对于 StringList
的大小,遍历向量的所有元素并累加字符串的大小。
string size = sizeof(string) + string.capacity()*sizeof(char)
最后,将 sizeof(StringList);
添加到其中。
对于 mapstring 的大小,循环遍历容器的所有键,并不断添加字符串大小,然后再添加 int 的大小,即 mapstring.size()*sizeof(int)
。最后,将 sizeof(mapstring);
添加到其中。
我想更好的方法是指定自己的分配器类并在其中跟踪内存使用情况,但编写一个可能会比较困难。这个估计看起来还不错吗?
std::map
元素必须包含各种额外的指针和与保持平衡相关的信息... Valgrind工具massif跟踪堆分配,并可能对分析程序的内存使用有所帮助。 - BoBTFish