unordered_set c++

unordered_set c++

本文关键字:c++ set unordered      更新时间:2023-10-16

我注意到,当我使用无序集合unordered_set<int> theSet;来保存大量整数时,即使调用clear()或rehash(0),它也不会释放内存。即使我在函数中本地定义了集合,并且该函数完成了执行,该集合保留的大部分内存仍然保留。有什么想法吗?

下面是一个示例代码,当测试器函数返回并且我们处于主要内存中时测试人员使用未释放

谢谢

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;
}

您可以使用临时集swap

std::unordered_set<MyType> mySet;
// do stuff with mySet
std::unordered_set<MyType>().swap( mySet );

但是你的第二个说法没有任何意义。如果已将集合声明为函数本地,则当函数退出时,将释放该集合使用的所有内存。

我在 unix 上使用顶部

可能发生的情况是内存确实被释放到堆中。但是,堆不会缩小,内存也不会释放回操作系统。因此top内存消耗没有减少。

如果您在销毁第一个unordered_set后重新创建,您可能不会看到内存消耗的增加,如top .

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