我有一个程序:
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <iomanip>
#include <vector>
#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
using namespace std;
int main() {
map<int, string> m;
for (int i = 0; i < 1000000; i++)
{
m[i] = "jahsdghsagdfv sahgvsahgd fvsahgdf fsdfjsadvhjgsd jhgfhsahfvsafh asfvasgfv jhgfdvsahgvfs";
}
m.clear();
while (1) {sleep(5);}
return 1;
}
clear()什么都不做。在内存监视器中,我看到内存使用量为184 Mb,清除后没有任何变化。为什么?如何清除地图的记忆?
答案 0 :(得分:1)
是的,map :: clear做了一些事情:&#34;删除地图容器中的所有元素(已销毁),使容器的大小为0 &#34。 数据也不会从堆栈/堆中删除,但这不会影响您,因为您没有指针,也没有对该过时数据的强制转换类型。 可能在您重新填充地图时,将重新使用内存区域并使用新值更新(如果其他变量未同时使用它)。