posts - 103,  comments - 41,  views - 20万

关于容器的处理,只是拿来用,理解不深,但是今天跑程序出了问题。释放空间未得到真正的释放。于是网上找了一些文章,解决的问题。

解决方法:使用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     // 此时检查内存情况 占用54M
16  
17     v.clear();
18     cin >> ch;
19     // 此时再次检查, 仍然占用54M
20  
21     cout << "Vector 的 容量为" << v.capacity() << endl;
22     // 此时容量为 1048576
23  
24     vector<string>(v).swap(v);
25  
26     cout << "Vector 的 容量为" << v.capacity() << endl;
27     // 此时容量为0
28     cin >> ch;
29     // 检查内存,释放了 10M+ 即为数据内存
30     return 0;
31 }
View Code
复制代码

参考链接:http://blog.jobbole.com/37700/

posted on   zCoderJoy  阅读(630)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示