您的位置:首页 > 其它

list与vector容器如何处理才能避免内存增长?

2015-11-26 15:20 357 查看
Vector容器如何清理?

典型的清理方式是在栈上定义一个空的vector,然后让使用过的vector与之swap。vector容器类的元素连续存放在一块内存区域中,所以删除部分甚至是全部元素后这块已经分配的内存空间并不被回收(主要是为了提高效率),其大小不变。

list容器如何清理?

与此不同,list 类的元素是节点存储方式,每删除一个元素,同时会回收这个元素所占有的内存空间。对于list,就没有这个必要了。其成员函数 remove,erase,pop_front,pop_back,clear等都会回收被删除元素的内存空间。

所以list使用的时候只要最后调用clear方法即可,栈上的头会自动退栈。

为什么top看内存并没有降低?

至于即使释放内存用 top 查看其内存只增不减的问题,是现代编译器普遍采用的一项内存优化策略所导致的,即进程中被释放的内存并不是真正地交给操作系统,而是仍归本进程使用。遇到下一次本进程分配内存的时候优先考虑这块被释放的内存空间,而不必每次都向操作系统提出分配内存的请求,从而可提高内存分配的效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: