大宝剑*_*大宝剑 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)
语言运行时保留已分配的内存,假设您可能希望再次使用它.将数百万个小块返回到操作系统需要相当长的时间,并使程序运行速度变慢.
如果你有一个非常大的向量,那仍然只是一个内存块.有些编译器会考虑在不再需要时返回这种内存.返回一个大块比一百万个小块块效率高得多.