如何分配STL地图?堆栈还是堆?

时间:2012-07-17 18:47:29

标签: c++ memory-management stl map

我想知道c ++中的STL map是否有连续的内存 - 还是分配给堆的内存?

2 个答案:

答案 0 :(得分:9)

由于map动态容器,其元素的内存是动态分配(无论这意味着什么(它取决于可配置的分配器)!)

此外,map基于节点的容器,因此每个元素都进入一个独立的,单独的分配(以便允许最大迭代器和引用非失效)。元素几乎肯定在内存中连续,并且可能以反映你如何添加元素的方式分散。

实际上,地图将被实现为某种类型的平衡树,以实现对数查找,插入和删除时间。

(如果您想要一个具有连续存储和对数查找时间的数据结构,请考虑一个已排序的向量。)

答案 1 :(得分:1)

这很可能是特定于实现的,而且ou can certainly change the allocator of any STL container,但这不适合胆小的人,你需要查看你正在使用的标准库的文档。

无论如何,map通常实现为red-black tree,并且树节点在堆上。

(树节点,如果我理解正确,包含instances of value_type,它们是地图的键/值对。)

请注意,堆栈对于任何容器都是一个糟糕的存储理念,因为堆栈应该被视为稀缺资源。