C++ 如何快速清空vector以及释放vector内存?
平时我们在写代码时候,有思考过要主动去释放vector的内存吗?
1、对于数据量不大的vector,没有必要自己主动释放vector,一切都交给操作系统。
2、但是对于大量数据的vector,在vector里面的数据被删除后,主动去释放vector的内存就变得很有必要了!
读者可以新建一个控制台程序,把代码运行起来看输出,且看代码:
- #include <iostream>
- #include <vector>
- #include <string>
- #include <Windows.h>
- #include <Psapi.h>
- #pragma comment(lib, "Psapi.lib")
- using namespace std;
- //GetCurPorcessMemory
- bool GetCurProcessMemory(HANDLE handle, std::wstring& workingSize, std::wstring& peakWorkingSize)
- {
- //HANDLE handle = GetCurrentProcess();
- PROCESS_MEMORY_COUNTERS pmc;
- if (GetProcessMemoryInfo(handle, &pmc, sizeof(pmc)))
- {
- int size = pmc.WorkingSetSize/1024;
- wchar_t buf[10] = {0};
- _ltow(size, buf, 10);
- workingSize = std::wstring(buf);
- size = pmc.PeakWorkingSetSize/1024;
- _ltow(size, buf, 10);
- peakWorkingSize = std::wstring(buf);
- return true;
- }
- return false;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::wstring wszWorking, wszPeakWorking;
- vector<string> ary;
- for (int i=0; i<1000000; i++)
- {
- ary.push_back("hello vector");
- }
- wchar_t wch;
- wcin >> wch;
- GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此时检查内存情况
- wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;
- wcin >> wch;
- //
- ary.clear();
- wcout << "vector clear" << endl;
- wcout << "vector capacity " << ary.capacity() << endl;
- GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此时再次检查
- wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;
- wcin >> wch;
- //vector<string>(ary).swap(ary);
- ary.swap(vector<string>(ary));
- wcout << "vector swap" << endl;
- wcout << "vector capacity " << ary.capacity() << endl;// 此时容量为0
- GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 检查内存
- wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl;
- wcout << "vector size : " << ary.size() << endl;//0
- //getchar();
- system("pause");
- return 0;
- }
https://blog.csdn.net/hellokandy/article/details/78500067
C++ 如何快速清空vector以及释放vector内存?的更多相关文章
- vector 利用swap 函数进行内存的释放 vector<int>().swap
首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...
- 正确释放Vector的内存
http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...
- 【转】[STL]vector和deque的内存释放(clear)
vector的clear成员函数可以清除vector中的元素,使其大小减至0.但它却不能减小vector占用的内存. [cpp] view plain copy int main() { vector ...
- linux几种快速清空文件内容的方法
linux几种快速清空文件内容的方法 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo & ...
- linux中快速清空文件内容的几种方法
这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- java.util.vector中的vector的详细用法
ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.util.*; /** * 演示Vector的使用.包括Vector的创 ...
- linux快速清空文件 比如log日志
linux中快速清空文件内容的几种方法这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 权限要求: 至少执行用户对该文件有写的权限 --w------- 1 QA_Dep ...
随机推荐
- 关于Webpack详述系列文章 (第二篇)
1.缩小文件搜索范围 1.1.1 include & exclude module:{ rules:[ { test:/\.js$/, use:['babel-loader?cacheDire ...
- jsp+tomcat+ 创建project 配置project
*如今我们已经下载到了 tomcat 7.0+ eclipse for java ee 直接解压,打开eclipse. 接下来是步骤: eclipse 打开的界面.空空如也 ! ..* 点击 file ...
- PMP杂谈--名词解释
过程:PMP中常常提到过程,好像非常高大上,实则不然,过程说白了就是一系列的行动和活动,用来创建预定的产品,服务或成果. 就这么简单. 再深入点就是,行动和活动当然都会有ITTO(输入,工具和技术.输 ...
- 【习题 6-2 UVA - 712】S-Trees
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] dfs模拟一下就好. 先预处理一个dfs. 搞出来x叶子节点它的值是什么 [代码] /* 1.Shoud it use long l ...
- Centos minimal 安装桌面
yum update yum groupinstall -y 'X Window System' yum groupinstall -y 'Desktop' #中文支持 yum groupinstal ...
- GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架
Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...
- SoC总线专题
SoC总线专题 TileLink ARM系列总线 APB AHB AXI CHI Wishbone
- /bin/bash^M: bad interpreter: 没有那个文件或文件夹
执行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是文件格式的问题,也就是linux和windows之间的不全然兼容... 详细细节无论,假设验证: vim test.sh ...
- mysql 存相同内容:utb8mb4 会比 utf8 占用更多的内存吗,utf8mb4 浪费内存吗?utf8 utf8mb4 区别
原文:mysql 存相同内容:utb8mb4 会比 utf8 占用更多的内存吗,utf8mb4 浪费内存吗?utf8 utf8mb4 区别 参考:http://www.fengyunxiao.cn u ...
- MVC5管道处理模型
原文:MVC5管道处理模型 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/82970442 ...