用swap方法强行释放STL容器占用的内存
来源:互联网 发布:csgo国服 mac 编辑:程序博客网 时间:2024/05/21 06:23
项目中用到了vector,list,set等容器,运行完毕后需要清理,以释放内存以降低内存开销。
一开始我直接使用clear()函数来释放,实际观察下来,内存并没有被释放。
经同事提醒,clear()并不能释放内存,需要使用swap来释放。于是查了一下,找到以下资料:
vector与deque不同,其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个。所有空间在vector析构时回收。
empty()是用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),所占用的内存空间依然如故。如果你需要空间动态缩小,可以考虑使用deque。如果非要用vector,这里有一个办法:
在《effective stl》和其实很多c++文章中都有指明,用clear()无法保证内存回收。但是swap技法可以。具体方法如下所示:
vector<int> nums;
nums.push_back(1);nums.push_back(1);nums.push_back(2);nums.push_back(2);
vector<int>().swap(nums); //或者nums.swap(vector<int>());
vector<int>().swap(nums); 或者如下所示 加一对大括号都可以,意思一样的:
{
std::vector<int> tmp = nums;
nums.swap(tmp);
}
加一对大括号是可以让tmp退出{}的时候自动析构
swap技法就是通过交换函数swap(),使得vector离开其自身的作用域,从而强制释放vector所占的内存空间。
http://cycloid.blog.163.com/blog/static/884786200961771149
- 用swap方法强行释放STL容器占用的内存
- 用swap方法强行释放STL容器占用的内存
- 用swap方法强行释放STL Vector所占内存(转载)
- STL:如何释放vector占用的内存
- STL容器vector内存的正确释放
- STL中各个容器的内存的释放
- 释放linux的swap内存
- [VB.Net]释放程序内存占用的方法
- 简单的程序诠释C++ STL算法系列之十五:swap ---》利用swap()函数进行内存的释放
- vector的内存释放与swap()
- 使用swap来释放vector的内存
- STL string的内存释放
- STL string的内存释放
- 查询占用内存和swap的程序
- vector 释放内存 swap
- vector 释放内存 swap
- vector 释放内存 swap
- vector 释放内存 swap
- android json解析及简单例子
- Linux网络编程--tcp服务器
- 使用 tag 文件定义自定义标签
- nyoj 1238 最少换乘 【最短路径-Dijksra】
- ImageView设置selector不起作用原因
- 用swap方法强行释放STL容器占用的内存
- 项目需求:将购物车中的商品添加到订单表和订单商品表
- 七个好习惯
- Linux网络编程——tcp、udp迭代服务器
- 《软件工程》笔记
- C++语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- JVM(7):JVM 调优
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- aws 远距离投送数据测试40分钟3GB