linux c++ stl的内存如何才会释放

2025-01-31 01:20:22
推荐回答(2个)
回答1:

首先回linxxx3童鞋的:
根据map的代码片段,可以看见重载下标运算符如下:
template,class Alloc = alloc>
{
....省略
T& operator[](const Key_type& k){
return (*((insert(value_type(k,T() ) ) ) .first)).second;
}
....省略
}
由以上代码可知.下标运算符中间接调用insert.
即使事先不存在的pair也会被新插入再取出value来.
童鞋,该补课了.

再回答楼主问题:
stl的内存实质上都是由allocator来负责管理的.
alloctor会管理一个内存池.按照标准而言.这个内存池会在stl实例被析构的时候将内存池销毁并还给系统调用库.
注意:是还给系统调用库.没有说还给系统了.
此时,这段被归还的内存是可以用于存放其它东西的.
只是他们还没有被还给系统.
如何"强迫他"还给系统呢?
这个问题要问这个系统库,一般而言.当有新的内存请求,而系统觉得内存太少的时候.他就问去检查下看有谁把内存还回来了.如果有,就把它们取回空闲内存区.
这就是为什么你随便new个什么内存立即 就回到系统的原因.
这个问题要深究可以去查阅linux内核编程相关的东西.

回答2:

fun那个函数里map的用法错了,向map里添加项必须用insert之类的方法,不插入直接用下标访问是错的,后面就不用谈了