[英]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.