首页 > 代码库 > vector 内存释放问题
vector 内存释放问题
关于容器的处理,只是拿来用,理解不深,但是今天跑程序出了问题。释放空间未得到真正的释放。于是网上找了一些文章,解决的问题。
解决方法:使用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 }
参考链接:http://blog.jobbole.com/37700/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。