作为键的类A的boost ptr_map和作为值B的指针向量的内存消耗

时间:2012-03-22 21:20:09

标签: c++ boost stl map

作为昨天发布的Memory consumption of a pointer to vector of pointers的后续问题,我还有另一个问题,关于具有密钥类型的boost ptr_map的内存使用情况,例如A类(现在假设为int)和值为a(指向)某种类型的指针向量(再次假设为int),这是一个ptr_map。我已经在问题How can i estimate memory usage of std::map?中读到了STL映射的内存消耗通常是

(sizeof(A) + sizeof(B) + ELEMENT_OVERHEAD) * N + CONTAINER_OVERHEAD

我的问题是关于

与此类设计有多大的元素开销
sizeof(A) + sizeof(B)

假设类型A和B(A这里​​假设是int,而B是指向int的指针向量的指针),我想,即使是普通STL贴图的答案也会有所帮助。另外,我想知道如果可能的话,如果A更复杂,事情如何/是否会改变。我猜元素开销也随着A的复杂性而增加?元素开销是否受到A和B大小总和的一部分限制?我担心的是,如果元素开销是一个很大的部分,并没有真正限制,那么使用地图的整个点似乎不再具有吸引力了。

1 个答案:

答案 0 :(得分:1)

正如Martinho Fernandes在评论中所说,每个地图项目的开销是不变的。

调查一些标准库实现后,地图项的开销:

      
  • GCC 4.4.3:每个节点有3个指针和1个枚举类型成员
  •   
  • MSVC ++ 2008,MSVC ++ 2010:每个节点有3个指针和2个char成员
  •   
  • STLPort 5.2.1:每个节点有3个指针和1个bool成员

GCC 4.4.3,MSVC ++ 2008,MSVC ++ 2010和STLPort 5.2.1使用红黑树来实现地图。