unordered_set c ++

时间:2012-11-28 18:18:09

标签: c++ memory unordered-set

我注意到当我使用无序集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;
}

2 个答案:

答案 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}}所测量的内存消耗增加。

当流程终止时,将回收其所有资源。