用swap方法強行釋放STL容器占用的記憶體

2022-03-02 19:21:36 字數 782 閱讀 4019

專案中用到了vector,list,set等容器,執行完畢後需要清理,以釋放記憶體以降低記憶體開銷。

一開始我直接使用clear()函式來釋放,實際觀察下來,記憶體並沒有被釋放。

vector與deque不同,其記憶體占用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9,999個,則雖然有效元素只有乙個,但是記憶體占用仍為10,000個。所有空間在vector析構時**。

empty()是用來檢測容器是否為空的,clear()可以清空所有元素。但是即使clear(),所占用的記憶體空間依然如故。如果你需要空間動態縮小,可以考慮使用deque。如果非要用vector,這裡有乙個辦法:

在《effective stl》和其實很多c++文章中都有指明,用clear()無法保證記憶體**。但是swap技法可以。具體方法如下所示:

vectornums;

nums.push_back(1);nums.push_back(1);nums.push_back(2);nums.push_back(2);

vector().swap(nums); //或者nums.swap(vector());

vector().swap(nums); 或者如下所示 加一對大括號都可以,意思一樣的:

加一對大括號是可以讓tmp退出{}的時候自動析構

swap技法就是通過交換函式swap(),使得vector離開其自身的作用域,從而強制釋放vector所佔的記憶體空間。

用swap方法強行釋放STL容器占用的記憶體

1.vector容器的記憶體自增長 與其他容器不同,其記憶體空間只會增長,不會減小。先來看看 c primer 中怎麼說 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空...

STL容器swap操作介紹

今天通過這篇部落格,以兩個非常規視角介紹stl容器swap操作。swap操作非常容易理解,因為字面意思不多不少的表達了函式所做的事,也即 交換 關於swap做了什麼唯一值得關注的就是交換的是指標而非內容。那麼交換之後容器的狀態呢,是否可以通過交換達到其他什麼目的呢。常見的連續記憶體容器,例如vect...

C vector容器的swap方法

剛才在研究cocos2d x原始碼時,遇到這麼幾行 void autoreleasepool clear autoreleasepool是乙個用來託管記憶體的物件池,managedobjectarray是乙個std vector型別的成員,用來儲存所有管理的物件,這幾行 要做的事情就是 遍歷所有物件...