如何释放boost :: unordered_map所拥有的空闲内存?

大宝剑*_*大宝剑 3 c++ memory unordered-map

我添加了大量元素,然后在boost :: unordered_map中将它们全部删除.然后我看到这个程序保存的内存是198MB(大于(64 + 4)*2M),unordered_map大小是0.

然后我测试一个向量,并没有这样的问题.为什么?

#include <iostream>
#include <boost/unordered_map.hpp>

template <int N>
struct big_struct {
    char c[N];
};

int main(void) {
    typedef big_struct<64> data_type;
    typedef boost::unordered_map<int, data_type*> map_type;

    map_type m;

    for (int i = 0; i < 2000 * 1000; i++) {
            m.insert(std::make_pair(i, new data_type));
    }   

    for (map_type::iterator it = m.begin(); it != m.end();) {
            delete it->second;
            it = m.erase(it);
    }   

    std::cout << "finish, map size " << m.size() << std::endl;
    pause();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bo *_*son 9

语言运行时保留已分配的内存,假设您可能希望再次使用它.将数百万个小块返回到操作系统需要相当长的时间,并使程序运行速度变慢.

如果你有一个非常大的向量,那仍然只是一个内存块.有些编译器会考虑在不再需要时返回这种内存.返回一个大块比一百万个小块块效率高得多.