您的位置:首页 > 其它

如何释放vector内存

2012-09-03 23:11 232 查看
vector内存不手动释放,等程序运行完可能回堆积大量空间,造成内存使用过高现象,所以一定要手动释放。下面是几种释放方法:

(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;
}

  vector()使用vector的默认构造函数建立临时vector对象,再在该临时对象上调用swap成员,swap调用之后对象v占用的空间就等于一个默认构造的对象的大小(寥寥),临时对象就具有原来对象v的大小,而该临时对象随即就会被析构,从而其占用的空间也被释放。

并不是所有的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;
}

  观察上面程序的行为,会发现程序在stage two的内存占用也是寥寥的了。

  另外,值得一提的是vector具有reserve成员,会提前为容器预留一定的空间,以防止后的push_back操作导致频繁地重新分配内存和移动元素。然而,据我观察,reserve并没有向系统申请内存。

  关于C++ STL容器的默认内存管理,需参考allocator。

关于deque的内存模型及其clear操作,我不甚了了,请参考您使用的标准库的代码。

若想深入了解STL的实现,侯捷大叔的《STL源码剖析》是不错的入门资料,希望能够拜读。

C++标准中并未对STL的实现细节做过多规定,因此不同实现的细节和表现可能不同。

  C++很复杂,但也并非无底黑洞。学好C++很难,但这种学习过程也会使你收获颇丰。

学习任何一种技术,都需要热情、激情和足够的耐心。

做好一件事,需要激情,同时激情常常来源于做好一件事情的满足感。

满足感会增强人分享的欲望,分享的欲望也常常会使人具有亲和力和感染力,使人觉得你有激情,反过来更有利于人做好一件事。

blabla, over~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vector释放内存