我注意到当我使用无序集unordered_set<int> theSet;
来保存大量整数时,即使调用clear()或rehash(0)也不释放内存。即使我在函数中本地定义了集合,并且函数完成了execusion,集合保留的大部分内存仍然保留。有什么想法吗?
下面是一个示例代码,当测试器函数返回并且我们在main中时,内存 测试人员使用的是没有释放
由于
using namespace std;
using std::tr1::unordered_set;
void tester() {
mySet.rehash(x);
for (int i = 0; i < 10000000; i++)
mySet.insert(i);
mySet.clear();
}
int main() {
tester();
return 0;
}
答案 0 :(得分:1)
您可以使用临时设置swap
。
std::unordered_set<MyType> mySet;
// do stuff with mySet
std::unordered_set<MyType>().swap( mySet );
但是你的第二个主张没有任何意义。如果你已经为一个函数声明了一个本地集合,那么当该函数退出时,该集合使用的所有内存都将被释放。
答案 1 :(得分:1)
我在unix上使用top
可能发生的事情是内存确实被释放到堆中。但是,堆不会缩小,并且内存不会释放回操作系统。因此top
没有显示内存消耗的任何减少。
如果您在销毁第一个unordered_set
后重新创建top
,则可能看不到{{1}}所测量的内存消耗增加。
当流程终止时,将回收其所有资源。