昨天我尝试使用 std::unordered_map
并且这段代码让我困惑它使用了多少内存。
typedef list<string> entityId_list;
struct tile_content {
char cost;
entityId_list entities;
};
unordered_map<int, tile_content> hash_map;
for (size_t i = 0; i < 19200; i++) {
tile_content t;
t.cost = 1;
map[i] = t;
}
所有这部分代码都是在 Debug模式下在 MS VS2010 中编译的。
我在我的任务管理器中看到的是大约 1200 kb 的“干净”进程,但在填充 hash_map
之后它使用了 8124 kb 的内存。这是 unordered_map
的正常行为吗?为什么占用这么多内存?
最佳答案
unordered_map
结构旨在以一种使添加、删除、查找和无序遍历高效的方式保存大量对象。对于小型数据结构,它并不意味着内存高效。为了避免与调整大小相关的惩罚,它在首次创建时分配了许多哈希链头。
关于c++ - std::unordered_map 非常高的内存使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375450/