swap清除vector占用記憶體

2021-05-22 00:22:34 字數 621 閱讀 7463

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空間

1 關閉swap 一般用於大物理記憶體的伺服器 swapoff a 在ssh中執行以上命令,則可以關閉swap分割槽。2 開啟swap swapon a 在ssh中執行以上命令,則可以開啟swap分割槽。當swap佔用率高達30 對系統效能可能會有一定影響,所以在適當情況下,我們可以執行上述的兩個命...

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

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

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

專案中用到了vector,list,set等容器,執行完畢後需要清理,以釋放記憶體以降低記憶體開銷。一開始我直接使用clear 函式來釋放,實際觀察下來,記憶體並沒有被釋放。vector與deque不同,其記憶體占用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9...