今天上午得到了一些高手指点,终于弄懂了堆内存释放的奥秘,特总结出来与大家分享!
Linux用户进程是如何释放内存的
Linux进程使用内存的基本流程:
从中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc进行的。所以我们调用free对malloc得到的内存进行释放的时候,并不是直接释放给操作系统,而是还给了glibc的堆管理实体,而glibc会在把实际的物理内存归还给系统的策略上做一些优化,以便优化用户任务的动态内存分配过程。
那么glibc的堆管理器在什么时候才把物理内存归还给系统呢?
它会从堆的最大线性地址开始,从后向前计算用户任务当前有多少空闲的堆内存(直到碰到使用中的堆内存地址为止)。
它会认为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给系统。而在中间的“未使用”内存是不会归还给系统的,所以系统也不可能再利用这块物理内存页(我们假设系统没有swap区和swap文件),也就是说系统的内存会为此减少,除非在它之前的堆内存都用free进行释放以后,glibc的堆管理器才有可能(只是有可能)把该段内存归还给系统。
由此,我们在使用malloc/free时应该小心,特别是在初始化时分配了好多内存,但是在这之后却再也不需要这么多的内存了,而这块内存又没有达到threshhold值或者在堆的最高线性地址处有某块内存没有释放,但是它前面的所有堆内存都释放了;这种情况下,用户任务将会浪费一些物理内存,这在资源比较紧张的嵌入式系统中是不可容忍的。
挖掘Linux操作系统堆内存释放
发布时间:2012-07-11 来源:百家学院网
摘要:今天上午得到了一些高手指点,终于弄懂了堆内存释放的奥秘,特总结出来与大家分享!
相关阅读:
推荐阅读
其他人正在看……
- ·组装电脑时如何选内存
- ·如何找回丢失的内存条
- ·解决系统提示虚拟内存不足
- ·戴尔笔记本电脑内存的安装
- ·谈虚拟内存与物理内存的关系
- ·内存 多功能一体机知识
- ·内存的历史 内存的技术发展历程
- ·增加内存导致c盘剩余空间不足
- ·虚拟内存与虚拟磁盘
- ·WIN2000下512M内存仍提示内存不足
- ·计算机内存故障解决办法
- ·如何释放内存中的无用DLL文件
- ·打印内存不足解决方法 重新启动打印系统
- ·笔记本电脑怎样升级内存最保险
- ·解决内存散热问题只需3步
- ·电脑内存常见问题及其解决方法
- ·主板不识内存条故障的分析与处理
- ·升级内存后出现问题故障分析与处理
- ·怎么把虚拟内存移到其它盘里
- ·内存插槽引起系统死机故障的分析与处理