当前位置:首页 > 编程开发

Linux堆内存释放

webgou16年前 (2010-11-22)编程开发224
[B]Linux用户进程是如何释放内存的 [/B] Linux进程使用内存的基本流程: 从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc进行的。 所以我们调用free对malloc得到的内存进行释放的时候,并不是直接释放给操作系统,而是还给了glibc的堆管理实体,而glibc会在把实际的物理内存归还给系统的策略上做一些优化,以便优化用户任务的动态内存分配过程。 那么glibc的堆管理器在什么时候才把物理内存归还给系统呢? 它会从堆的最大线性地址开始,从后向前计算用户任务当前有多少空闲的堆内存(直到碰到使用中的堆内存地址为止),比如在该图中, 它会认为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给系统。而在中间的 “未使用”内存是不会归还给系统的,所以系统也不可能再利用这块物理内存页(我们假设系统没有swap区和swap文件),也就是说系统的内存会为此减少,除非在它之前的堆内存都用free进行释放以后,glibc的堆管理器才有可能(只是有可能)把该段内存归还给系统。 由此,我们在使用malloc/free时应该小心,特别是在初始化时分配了好多内存,但是在这之后却再也不需要这么多的内存了,而这块内存又没有达到 threshhold值或者在堆的最高线性地址处有某块内存没有释放,但是它前面的所有堆内存都释放了;这种情况下,用户任务将会浪费一些物理内存,这在资源比较紧张的嵌入式系统中是不可容忍的。 参考: http://www.ibm.com/developerworks/cn/linux/l-memory/index.html http://bbs.chinaunix.net/viewthread.php?tid=566246& http://linux.chinaunix.net/bbs/viewthread.php?tid=677609&extra=

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=401

分享给朋友:

“Linux堆内存释放” 的相关文章

文件拖动

在VC中,我们可以不利用打开文件对话框来选择文件,从而对文件进行操作,我们也可以使用拖拽来实现这样的功能。具体如下:1.首先,把一个对话框或者窗体的扩展属性【接受文件】勾选上。2.我们对WM_DROPFILES消息进行处理。在这里我们使用到了一个API函数:DragQueryFile...…

Unity3D占用内存太大的解决方法

 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化....…

总结:用OleObject嵌入flash ocx

用OleObject嵌入flash ocx总结 用了好几天的时间,从从未接触com到知道用oleobject嵌入 flash ocx的过程。应该要注意下面几点: 1.实现ole 接口 2.用#import 加载 flash ocx ...…

35个强大的UI设计教程

下面是35个非常不错的UI设计的的教程及效果图,非常不错哦。不但教你如何做一些特效,同样教你如何做UI布局和界面设计。当然,他们风格迥异,也基本上都是Web页面上的。都非常不错。希望你喜欢。(点击下面的图片可以打开相关的教程) Old Paper Layout   Professiona…

AppStore 内购验证的方法

AppStore 内购验证的方法…

中国网络支付平台

这几天,关于电商京东收购网银在线的新闻所谓铺天盖地,下面也来看看几家比较有名的中国网络支付平台  支付宝建立于2004年,是国内领先的独立第三方支付平台,支付宝致力于为中国电子商务提供“简单、安全、快速”的在线支付解决方案。财付通是腾讯公司创办的中国领先的…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。