作为昨天发布的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大小总和的一部分限制?我担心的是,如果元素开销是一个很大的部分,并没有真正限制,那么使用地图的整个点似乎不再具有吸引力了。
答案 0 :(得分:1)
正如Martinho Fernandes在评论中所说,每个地图项目的开销是不变的。
调查一些标准库实现后,地图项的开销:
GCC 4.4.3,MSVC ++ 2008,MSVC ++ 2010和STLPort 5.2.1使用红黑树来实现地图。