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記憶體。在計算機的組成結構中,有乙個很重要的部分,就是儲存器。儲存器是用來儲存程式和資料的部件,對於計算機來...