最近遇到了map的内存不释放的问题,仔细研究了一下,不废话,上代码。
#include<map>
#include<string>
#include<iostream>
#include <unistd.h>
#include <malloc.h>
using namespace std;
int main()
{
map<int,unsigned char*> m;
while (1) {
//分配
for (int i = 0; i < 1000000; i++) {
m[i]= new unsigned char[10];
}
//释放
auto iterator = m.begin();
while (iterator != m.end()) {
delete[] iterator->second;
m.erase(iterator++);
}
//有人说加这一行,其实没有用
//map<int,string*>().swap(m);
//加上此行会回收内存,不加的话占用的物理内存不会释放,但是map会自动重新利用已经分配的内存,在不断的重新申请释放的过程中,内存一直保持不变。
//至于malloc_trim()函数那就是另外一个话题了。
malloc_trim(0);
sleep(2);
}
return 0;
}
使用watch查看内存的变化
watch -d cat /proc/{pid}/status
这一行就是占用的物理内存:
VmRSS: 3188 kB