unordered_set c++
unordered_set c++
我注意到,当我使用无序集合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
.
当进程终止时,将回收其所有资源。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 使用运算符调用 void 函数时出错<set>
- 修改"std::set"中用户定义类型的值
- 生成提升::hana::set 的常量表达式问题
- 如何在构造函数参数中初始化"std::set"?
- 如何使用 lower_bound/upper_bound 从 std::set 获取索引号?
- 如何在 C++ 中转发声明 std::set?
- 重构使用动态强制转换的 std::set 的比较运算符
- set::find 查找不存在的元素
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 将 std:set<int32_t> 复制到 std::set <uint32_t>的好方法
- 错误 C2676:std::set::const_iterator 没有运算符 + 函数?
- std::set 是否将对象连续存储在内存中?
- 是否有一个 std::set 函数来确定不超过数字 x 的最大元素?
- google test PrintTo for std::set<std::string>