【问题标题】:Size in bytes of a structure containing unordered_map包含 unordered_map 的结构的大小(以字节为单位)
【发布时间】:2011-11-22 17:41:21
【问题描述】:

需要找到我实现的树数据结构占用的确切大小(以字节为单位)。节点结构如下

struct Node
{
    int  word;       
    int   count;       
    unordered_map<int, Node*> map;       

}node;   

我一直在做的是 size(int)*2(for word and count) + map.bucket_count() * (sizeof(int) + sizeof(Node*)) 并为每个节点重复执行此操作。 如果我忽略了 unordered_map 中存储的元素开销,这是正确的方法吗?

另外,如果我是正确的,map.bucket_count() 会给出当前分配的桶数,包括预分配的桶数。我应该改用 map.size() 来忽略预先分配的存储桶吗?

或者,与其使用所有这些,不如使用 MemTrack 之类的工具来查找已使用的内存?

【问题讨论】:

  • 由于哈希映射的每个桶都包含可变数量的条目,因此您将能够在空节点的大小上进行刺探,但具有子节点的节点将具有可变大小。
  • 如果你想做一个实验,你可以替换 new-operator 并在你将元素插入地图时观察分配。
  • 是,,,,,,,,,,,,,,,,,,,,
  • 不完全重复。

标签: c++ size byte unordered-map


【解决方案1】:

或者,与其使用所有这些,不如使用 MemTrack 之类的工具来查找使用的内存?

是的。从外部无法得知unordered_map 或其他复杂、不透明的对象占用了多少内存,一个好的内存分析器也可能会告诉您内存分配器本身占用了多少开销。

【讨论】:

  • 嘿,谢谢 larsman。MemTrack 是一个好的分析器,还是有更好的分析器?
  • 我不知道这个 MemTrack。我倾向于非常粗略地使用旧的top 进行内存分析:)
猜你喜欢
  • 2016-11-21
  • 2018-01-01
  • 1970-01-01
  • 2012-09-27
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2012-08-08
相关资源
最近更新 更多