为什么调用 std::map::clear() 后内存占用率没有降低?

size很大的一个map,用完后调用了clear()函数,按说内存使用率应该能降低很多,top命令观察,结果是内存使用率没有降低,为什么呢? 求解答,…
关注者
196
被浏览
139,623

11 个回答

只有含 reserve()/capacity() 成员函数的容器才需要用 swap idiom 来释放空间,而 C++ 里只有 vector 和 string 这两个符合条件。在 C++11 中可以直接使用 shrink_to_fit()。

list/deque/set/map 等容器是没有 reserve() 和 capacity() 这两个成员函数的,因此 swap 是无用功(除非用户代码使用了定制的 per-object allocator)。