0

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

下面是一个示例代码,当 tester 函数返回并且我们在 main 中时,tester 使用的内存没有被释放

谢谢

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

2 回答 2

1

你可以swap用一个临时设置。

std::unordered_set<MyType> mySet;

// do stuff with mySet

std::unordered_set<MyType>().swap( mySet );

但是你的第二个说法没有任何意义。如果你声明了一个函数的局部集合,那么当函数退出时,该集合使用的所有内存都将被释放。

于 2012-11-28T18:23:21.330 回答
1

我在 unix 上使用 top

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

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

当进程终止时,它的所有资源都将被回收。

于 2012-11-28T18:35:22.177 回答