c++ - std::unordered_map 非常高的内存使用率

标签 c++ visual-c++ unordered-map

昨天我尝试使用 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/

相关文章:

c++ - 使用 C++ 进行异或加密

c++ - 引用 init 两次 cpp

c++ - OpenCV/C - 提高耗时循环的速度?

c++ - 共享预编译头文件

C++ 函数指针和回调函数

c++ - windows.h 已经包含 afxv_w32.h - CString

C++17 - 使用自定义分配器提取/重新插入节点 - 适用于 clang++/libc++ 但不适用于 libstdc++

unordered_map 中的 C++ 远程键

c++ - std::unordered_map 是如何实现的

c++ - 处理不完整类型的 const/non-const 模板类型引用时的不同编译结果