簡體   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