如何分配STL映射?堆叠还是堆积? 我想知道C++中的STL map >代码>是否有连续的内存,或者是分配给堆的内存?< /p> < p>,因为代码> map 是动态容器,它的元素的内存被动态分配(不管这意味着什么(它取决于可配置的分配器)!)

如何分配STL映射?堆叠还是堆积? 我想知道C++中的STL map >代码>是否有连续的内存,或者是分配给堆的内存?< /p> < p>,因为代码> map 是动态容器,它的元素的内存被动态分配(不管这意味着什么(它取决于可配置的分配器)!),c++,memory-management,stl,map,C++,Memory Management,Stl,Map,此外,map是一个基于节点的容器,因此每个元素进入一个不同的、单独的分配(以便允许最大的迭代器和引用无效)。元素在内存中几乎肯定是不连续的,并且可能以反映您添加它们的方式分散 实际上,映射将被实现为某种类型的平衡树,以实现对数查找、插入和删除时间 (如果你想要一个具有连续存储和对数查找时间的数据结构,考虑一个排序的向量)。 < P>它可能不仅仅是实现特定的,而且Y,但是这不是针对心脏的弱点,你需要查看你正在使用的标准库的文档。 无论如何,map通常是作为一个树实现的,树节点在堆上 (如果我理解正

此外,
map
是一个基于节点的容器,因此每个元素进入一个不同的、单独的分配(以便允许最大的迭代器和引用无效)。元素在内存中几乎肯定是不连续的,并且可能以反映您添加它们的方式分散

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


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

< P>它可能不仅仅是实现特定的,而且Y,但是这不是针对心脏的弱点,你需要查看你正在使用的标准库的文档。 无论如何,map通常是作为一个树实现的,树节点在堆上

(如果我理解正确,树节点包含,它们是映射的键/值对)


请注意,对于任何容器来说,堆栈都不是一个好的存储方法,因为堆栈应该被视为一种稀缺资源。

与“对齐”有什么关系?您不能将“堆栈”内存用于
映射
;这是不可能的。@Mehrdad:我的自定义
堆栈分配器
想和你谈谈:P@Xeo当前位置我认为我们对“堆栈”一词的理解不尽相同我说的是CPU堆栈,而不是任何看起来像堆栈的东西。但事实上,我一直在考虑做一些像堆栈一样分配的东西。当它们以堆栈式的方式出现时,分配器的目的是提供有效的分配吗?如果是的话,你介意分享一下吗编写分配器是一件痛苦的事……你是否有什么特别的理由在乎它。如果你解释一下你为什么想知道,也许我们能帮上更多的忙。这都是真的,除非你使用了一个分配器,它能使项目在内存中连续,或者你很幸运。:)@abarnert:它们可能很容易与一个
堆栈分配器
相连,该分配器将内存缓冲区作为分配的输入,但它们在内存中可能没有排序顺序。@Xeo:每个节点中可能都有一些节点开销,这意味着实际数据可能永远不会连续。@Kerrek:True,用于迭代的节点之间的链接。