vector 記憶體釋放問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   

關於容器的處理,只是拿來用,理解不深,但是今天跑程式出了問題。釋放空間未得到真正的釋放。於是網上找了一些文章,解決的問題。

解決方案:使用swap 加上clear,一起釋放空間。

原理:即先建立一個臨時拷貝與原先的vector一致,值得注意的是,此時的拷貝(申請空間時系統分配容量)其容量是儘可能小的符合所需資料的。緊接著將該拷貝與原先的vector 進行交換。好了此時,執行交換後,臨時變數會被銷毀,記憶體得到釋放。此時的v即為原先 的臨時拷貝,而交換後的臨時拷貝則為容量非常大的vector(不過已經被銷毀)。

用法:例子如下:

 1 #include <iostream> 2 #include <vector> 3   4 using namespace std; 5   6 vector <string> v; 7 char ch; 8   9 int main ()10 {11  12     for(int i=0; i<1000000; i++)13         v.push_back("abcdefghijklmn");14     cin >> ch;15     // 此時檢查記憶體情況 佔用54M16  17     v.clear();18     cin >> ch;19     // 此時再次檢查, 仍然佔用54M20  21     cout << "Vector 的 容量為" << v.capacity() << endl;22     // 此時容量為 104857623  24     vector<string>(v).swap(v);25  26     cout << "Vector 的 容量為" << v.capacity() << endl;27     // 此時容量為028     cin >> ch;29     // 檢查記憶體,釋放了 10M+ 即為資料記憶體30     return 0;31 }
View Code

參考連結:http://blog.jobbole.com/37700/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.