我在一个boost::unordered_map中添加了大量元素,然后将它们全部删除。这时我发现程序所占用的内存为198MB(大于(64+4)*2M),而unordered_map的大小为0。
接着我测试了一个vector,但是没有出现这样的问题。为什么呢?
接着我测试了一个vector,但是没有出现这样的问题。为什么呢?
#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;
}
std::vector
的?我的测试结果显示,std::vector
和boost::unordered_map
的行为完全相同,正如预期的那样。 - n. m.