如何释放vector内存
2012-09-03 23:11
232 查看
vector内存不手动释放,等程序运行完可能回堆积大量空间,造成内存使用过高现象,所以一定要手动释放。下面是几种释放方法:
(1),若想释放vector占用的空间,可以使用swap技巧,
vector()使用vector的默认构造函数建立临时vector对象,再在该临时对象上调用swap成员,swap调用之后对象v占用的空间就等于一个默认构造的对象的大小(寥寥),临时对象就具有原来对象v的大小,而该临时对象随即就会被析构,从而其占用的空间也被释放。
并不是所有的STL容器的clear成员的行为都和vector一样。事实上,其他容器的clear成员都会释放其内存。比如另一个和vector类似的顺序容器deque,
观察上面程序的行为,会发现程序在stage two的内存占用也是寥寥的了。
另外,值得一提的是vector具有reserve成员,会提前为容器预留一定的空间,以防止后的push_back操作导致频繁地重新分配内存和移动元素。然而,据我观察,reserve并没有向系统申请内存。
关于C++ STL容器的默认内存管理,需参考allocator。
关于deque的内存模型及其clear操作,我不甚了了,请参考您使用的标准库的代码。
若想深入了解STL的实现,侯捷大叔的《STL源码剖析》是不错的入门资料,希望能够拜读。
C++标准中并未对STL的实现细节做过多规定,因此不同实现的细节和表现可能不同。
C++很复杂,但也并非无底黑洞。学好C++很难,但这种学习过程也会使你收获颇丰。
学习任何一种技术,都需要热情、激情和足够的耐心。
做好一件事,需要激情,同时激情常常来源于做好一件事情的满足感。
满足感会增强人分享的欲望,分享的欲望也常常会使人具有亲和力和感染力,使人觉得你有激情,反过来更有利于人做好一件事。
blabla, over~
(1),若想释放vector占用的空间,可以使用swap技巧,
1 2 3 4 5 6 7 8 9 10 11 | int main() { vector<int> v(1U<<29); cout<<"step into stage one..."<<endl; sleep(30); vector<int>().swap(v); cout<<"step into stage two..."<<endl; sleep(30); return 0; } |
并不是所有的STL容器的clear成员的行为都和vector一样。事实上,其他容器的clear成员都会释放其内存。比如另一个和vector类似的顺序容器deque,
1 2 3 4 5 6 7 8 9 10 11 | int main() { deque<int> dq(1U<<29); cout<<"step into stage one..."<<endl; sleep(30); dq.clear(); cout<<"step into stage two..."<<endl; sleep(30); return 0; } |
另外,值得一提的是vector具有reserve成员,会提前为容器预留一定的空间,以防止后的push_back操作导致频繁地重新分配内存和移动元素。然而,据我观察,reserve并没有向系统申请内存。
关于C++ STL容器的默认内存管理,需参考allocator。
关于deque的内存模型及其clear操作,我不甚了了,请参考您使用的标准库的代码。
若想深入了解STL的实现,侯捷大叔的《STL源码剖析》是不错的入门资料,希望能够拜读。
C++标准中并未对STL的实现细节做过多规定,因此不同实现的细节和表现可能不同。
C++很复杂,但也并非无底黑洞。学好C++很难,但这种学习过程也会使你收获颇丰。
学习任何一种技术,都需要热情、激情和足够的耐心。
做好一件事,需要激情,同时激情常常来源于做好一件事情的满足感。
满足感会增强人分享的欲望,分享的欲望也常常会使人具有亲和力和感染力,使人觉得你有激情,反过来更有利于人做好一件事。
blabla, over~
相关文章推荐
- 如何正确释放Vector的内存
- c++ vector 如何释放内存
- Vector如何释放内存呢?
- C++ 如何快速清空vector以及释放vector内存?
- vector中删除元素后,如何有效的释放无效元素的内存
- STL:如何释放vector占用的内存
- STL之vector内存释放
- vector容器删除某些元素且释放内存
- STL string和vector的内存释放
- 如何释放jquery插件占用的内存?
- 如何手工释放linux内存
- [FAQ19076]如何查看slub内存申请/释放的调用栈
- 嵌入式 如何手动释放Linux内存的方法
- PHP如何释放内存之unset销毁变量并释放内存详解
- Vector清空数据与释放内存(.clear与.swap的区别与使用)
- PHP如何释放内存之unset销毁变量并释放内存详解
- 讨教:WINCE 开发中,如何让.net程序及时地释放内存,如何可以节省内存?
- win2003中如何释放内存
- c++的vector赋值方法汇总 及正确释放vector的内存
- 如何手工释放linux内存