平时我们在写代码时候,有思考过要主动去释放vector的内存吗?

1、对于数据量不大的vector,没有必要自己主动释放vector,一切都交给操作系统。

2、但是对于大量数据的vector,在vector里面的数据被删除后,主动去释放vector的内存就变得很有必要了!

读者可以新建一个控制台程序,把代码运行起来看输出,且看代码:

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

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

C++ 如何快速清空vector以及释放vector内存?的更多相关文章

  1. vector 利用swap 函数进行内存的释放 vector<int>().swap

    首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...

  2. 正确释放Vector的内存

    http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...

  3. 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

    关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...

  4. 【转】[STL]vector和deque的内存释放(clear)

    vector的clear成员函数可以清除vector中的元素,使其大小减至0.但它却不能减小vector占用的内存. [cpp] view plain copy int main() { vector ...

  5. linux几种快速清空文件内容的方法

    linux几种快速清空文件内容的方法 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo & ...

  6. linux中快速清空文件内容的几种方法

    这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...

  7. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  8. java.util.vector中的vector的详细用法

    ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创 ...

  9. linux快速清空文件 比如log日志

    linux中快速清空文件内容的几种方法这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 权限要求: 至少执行用户对该文件有写的权限 --w------- 1 QA_Dep ...

随机推荐

  1. (F) linux sort,uniq,cut,wc命令详解

    F:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html sort sort 命令对 File 参数指定的文件中的行排序,并 ...

  2. python 时间合集 一

    **以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨**#### python中4种时间表示形式:1.格式化时间字符串 2.时间戳 3.时间元祖 4.时间对象- string_time ...

  3. Unity5中的粒子缩放(附测试源码)

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/49363241 作者:car ...

  4. echarts统计图踩坑合集

    1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...

  5. 感谢党,软考过了。系统集成项目管理project师

    人品爆发了,刚用干巴巴的日语做完2小时的设计说明,回到家一查,人品爆发了.软考竟然过了. 绝对是评卷老师给人品啊!真想请他吃顿饭. 系统集成项目管理project师  64 53 幸运飞过! 今天真是 ...

  6. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第四篇:传递表单数据

    摘要      本文将完成我们“MVC公告发布系统”的公告发布功能,以此展示在ASP.NET MVC中如何传递处理表单的数据. 前言      通过前几篇文章,我们已经能比较自如的使用ASP.NET ...

  7. 16、cgminer学习之:pthread_mutex_init和pthread_cond_init

    1.原理 假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0. Int  n = 0 ; 消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n= ...

  8. HSV颜色模型

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model). 注意的是OpenC ...

  9. [Angular] Protect The Session Id with https and http only

    For the whole signup process. we need to Hash the password to create a password digest Store the use ...

  10. 无状态会话bean(1)---定义

    无状态会话bean用于完毕在单个方法的生命周期内的操作.无状态bean能够实现很多业务操作,可是每一个方法都不能假定不论什么其它的方法会在它之前调用.后半句的意思是如今的你可能不是刚才的你.明天的你可 ...