繁体   English   中英

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

[英]How is a STL map allocated? Stack or Heap?

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

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

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

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

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

它很可能是特定于实现的,并且您当然可以更改任何STL容器的分配器 ,但这不适合胆小的人,您需要查看您正在使用的标准库的文档。

无论如何,map通常实现为红黑树 ,树节点在堆上。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM