C++ 如何快速清空vector以及釋放vector內存?


平時我們在寫代碼時候,有思考過要主動去釋放vector的內存嗎?

1、對於數據量不大的vector,沒有必要自己主動釋放vector,一切都交給操作系統。

2、但是對於大量數據的vector,在vector里面的數據被刪除后,主動去釋放vector的內存就變得很有必要了!

 

讀者可以新建一個控制台程序,把代碼運行起來看輸出,且看代碼:

 

[cpp]  view plain  copy
 
  1. #include <iostream>  
  2. #include <vector>  
  3. #include <string>  
  4. #include <Windows.h>  
  5. #include <Psapi.h>  
  6. #pragma comment(lib, "Psapi.lib")  
  7.   
  8. using namespace std;  
  9.   
  10. //GetCurPorcessMemory  
  11. bool GetCurProcessMemory(HANDLE handle, std::wstring& workingSize, std::wstring& peakWorkingSize)  
  12. {  
  13.     //HANDLE handle = GetCurrentProcess();  
  14.     PROCESS_MEMORY_COUNTERS pmc;  
  15.     if (GetProcessMemoryInfo(handle, &pmc, sizeof(pmc)))  
  16.     {  
  17.         int size = pmc.WorkingSetSize/1024;  
  18.         wchar_t buf[10] = {0};  
  19.         _ltow(size, buf, 10);  
  20.         workingSize = std::wstring(buf);  
  21.   
  22.         size = pmc.PeakWorkingSetSize/1024;  
  23.         _ltow(size, buf, 10);  
  24.         peakWorkingSize = std::wstring(buf);  
  25.   
  26.         return true;  
  27.     }  
  28.     return false;  
  29. }  
  30.   
  31. int _tmain(int argc, _TCHAR* argv[])  
  32. {  
  33.     std::wstring wszWorking, wszPeakWorking;  
  34.     vector<string> ary;  
  35.   
  36.     for (int i=0; i<1000000; i++)  
  37.     {  
  38.         ary.push_back("hello vector");  
  39.     }  
  40.   
  41.     wchar_t wch;  
  42.     wcin >> wch;  
  43.   
  44.     GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此時檢查內存情況  
  45.     wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;  
  46.   
  47.     wcin >> wch;  
  48.   
  49.     //  
  50.     ary.clear();  
  51.     wcout << "vector clear" << endl;  
  52.     wcout << "vector capacity " << ary.capacity() << endl;      
  53.     GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此時再次檢查  
  54.     wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;  
  55.   
  56.     wcin >> wch;  
  57.     //vector<string>(ary).swap(ary);  
  58.     ary.swap(vector<string>(ary));      
  59.     wcout << "vector swap" << endl;  
  60.     wcout << "vector capacity " << ary.capacity() << endl;// 此時容量為0     
  61.     GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 檢查內存  
  62.     wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;  
  63.   
  64.     wcout << "vector size : " << ary.size() << endl;//0  
  65.   
  66.     //getchar();  
  67.     system("pause");  
  68.   
  69.     return 0;  
  70. }  

https://blog.csdn.net/hellokandy/article/details/78500067


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM