关于c++ stl 内存回收问题

本文探讨了C++中STL的vector和map在内存回收上的不同行为。在Linux(CentOS 5.5)下,map在作用域结束时内存未被系统回收,但可被进程内部重用,而Windows系统则能回收。vector使用swap方法可释放内存,而map的内存释放情况存在疑问,特别是其无capacity属性导致的内存管理不同于vector。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用到c++  stl 的map和vector来处理大量数据,发现内存实在是个问题,网上对这个问题也讨论的很多,现就我自己的实验和网上的讨论做下总结。

关于vector:

        这个好像没什么问题,用swap系统可以回收内存,作用域结束(比如声明一个vector为局部变量的函数退出后)也会自动系统也会自动回收。

关于map:

        在linux (CentOS release 5.5,内核2.6.34.7,gcc version 4.1.2 20080704 (Red Hat 4.1.2-48))下,用尽网上所说的一切办法,即便map的作用域结束,系统也并没有回收内存,但是这部分内存还是能够被利用来分配给新的map,按照网上的说法是这部分内存缓存起来供此进程来用。也就是说一个进程的map的内存被释放掉后只能被此进程利用,系统的其他进程用不了。

        在windows下却能够被系统回收。


另外关于swap的一点疑问有待考证:

map并没有capacity一说,它用红黑树非连续分配内存,clear和swap都应该会释放内存给进程(windows给系统)?

但是vector是有capacity的,所以clear只是把元素给清空,但是分配给它的内存并没有清空,只能用swap的办法释放内存?



举例某次试验代码:

/** test for stl mem**

 ******by lcj*******/

#include <vector>
#include <map>
#include <iostream>

using namespace std;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值