linux cstl的記憶體如何才會釋放

時間 2021-08-30 09:08:32

1樓:匿名使用者

首先回lin***3童鞋的:

根據map的**片段,可以看見過載下標運算子如下:

template,class alloc = alloc>....省略

}由以上**可知.下標運算子中間接呼叫insert.

即使事先不存在的pair也會被新插入再取出value來.

童鞋,該補課了.

再回答樓主問題:

stl的記憶體實質上都是由allocator來負責管理的.

alloctor會管理乙個記憶體池.按照標準而言.這個記憶體池會在stl例項被析構的時候將記憶體池銷毀並還給系統呼叫庫.

注意:是還給系統呼叫庫.沒有說還給系統了.

此時,這段被歸還的記憶體是可以用於存放其它東西的.

只是他們還沒有被還給系統.

如何"強迫他"還給系統呢?

這個問題要問這個系統庫,一般而言.當有新的記憶體請求,而系統覺得記憶體太少的時候.他就問去檢查下看有誰把記憶體還回來了.如果有,就把它們取回空閒記憶體區.

這就是為什麼你隨便new個什麼記憶體立即 就回到系統的原因.

這個問題要深究可以去查閱linux核心程式設計相關的東西.

2樓:匿名使用者

fun那個函式裡map的用法錯了,向map裡新增項必須用insert之類的方法,不插入直接用下標訪問是錯的,後面就不用談了

c++stl中的queue pop乙個元素的時候會不會釋放該元素記憶體?

3樓:匿名使用者

分配過的記憶體即使pop也不會釋放。除非是queue析構才會釋放全部記憶體。

4樓:匿名使用者

會的,他會自己管理記憶體,很安全你不需要考慮那些

5樓:匿名使用者

這是什麼問題,不會。

6樓:匿名使用者

1、queue自己不儲存物件

,它只是包裝了deque,使用deque來儲存物件;2、deque裡使用了快取技術

回,如果deque不析構,裡面的緩

答沖區只會變大不會變小。可以使用deque.erase()函式釋放物件;3、queue沒有釋放物件的方法,應該是在自身析構的時候釋放;4、其實完全可以用deque,這樣更直接一些,而且釋放物件也方便;5、詳細可以參考:

www.cplusplus.com

c++ stl呼叫clear函式,記憶體是怎麼工作的?

7樓:匿名使用者

記住,如bai果你自己呼叫了new,那麼du自己delete。zhi如果是類,析構函式會自己dao呼叫。

你這裡至少有

回2個錯誤。

list b;

b.push_back(node());

b.pop_back()

這也都有錯。裡面答的指標被複製後被刪除了兩次這就更錯了

list b;

b.push_back( new node);

b.pop_back()

不會呼叫指標指向的類的析構函式(否者你放了個0,怎麼辦?

除非你很了解c++,否者不要在類裡放指標。 放個陣列沒問題。

8樓:手機使用者

記住,如果你自己呼叫了new,那麼自己delete。

如果是類,析構函式會自己呼叫。

c++ stl中std::list佔很大的記憶體

9樓:匿名使用者

這個資料結構不失敗,失敗的最多只是某個特定的實現

而且因為你儲存的資料本身很小,所以資料結構的額外空間相比於資料可以很大,也很正常

所以500mb並不算特別的差了

10樓:匿名使用者

500m不大的嘛,用的debug版的程式吧?debug版程式記憶體記了很多堆的除錯資訊的,你的list只用來放char,當然利用率就非常低嘍。

11樓:

為什麼不用std::string而用std::list?

c++ stl vector erase函式中,有沒有重新分配記憶體?

12樓:匿名使用者

沒有重新分配。但是後續的元素被往前移動,因此被刪除的元素之後的迭代器會失效。例如,下面的**在debug模式下將會崩潰,在release模式下正常執行而且可以看到陣列的位址並沒有改變。

#include

#include

int main();

auto p = v.end() - 2;

std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";

v.erase(v.begin() + 2);

std::cout << &v[0] << "\t" << *p << "\t" << &*p << "\n";

return 0;

}v.swap(vector(v));將v複製到新的向量中(這個向量的容量正好和v的大小一樣),然後與v進行交換。因為這是乙個區域性變數,所以這句話結束時會將從v處獲得的記憶體釋放。

同時,v在交換之後,容量和大小一致。

建議你看一下源**,或者單步除錯看看具體的執行過程。

stl中map,vector等需要手動清空嗎

13樓:匿名使用者

如果儲存的不是指標,沒有問題。stl有自己的記憶體管理,他們都是物件,過了生存期後他們會自己析構已經分配的空間。

手機記憶體要多大才夠用,手機記憶體到底多大才夠用,需要買256G記憶體的手機嗎?

禾凝慕子薇 記憶體夠用兩個字不好說啊。就跟電腦一樣。五年前32m記憶體也感覺很好。五年後呢?1g記憶體還覺得小。手機也是一樣。普通手機才幾百k的記憶體。智慧手機像dopod的。幾百m。甚至有1g的記憶體了。可是你要是拿來放電影什麼的還是會覺得記憶體不夠大的。所以沒有夠與不夠。而在於你作何用途 i奇趣...

如何看電腦記憶體,如何看自己電腦記憶體的型號?

電腦已經普及到每個家庭中,在購買電腦時,大家一般都會詢問電腦記憶體多少,因為這關係著系統執行速度。一些使用者想要自己檢視電腦記憶體大小,但礙於新手,不懂 下手。今天教大家檢視電腦記憶體的方法。方法步驟 1.電腦的記憶體非常的重要,記憶體如果較小的話。執行軟體多了就會變得卡頓 怎麼看電腦記憶體?看電腦...

膝上型電腦記憶體多大合適記憶體多大才夠用

墨汁諾 一般的主流配置,現在標配4g記憶體,或者2g,高階的8g,但是,最大支援記憶體一般是8g,少數16g甚至更高,比如最大支援24g。剛查到一款 為10萬元左右的筆記本支援擴充套件到24g記憶體。在計算機的組成結構中,有乙個很重要的部分,就是儲存器。儲存器是用來儲存程式和資料的部件,對於計算機來...