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

Linux堆内存释放

webgou16年前 (2010-11-22)编程开发187
[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堆内存释放” 的相关文章

Apple新闻之在线收音机 “微电台” 开始支持 Mac,苹果电脑用户可以听国内广播电台的节目了

    听广播曾是国内苹果电脑用户面临的中国特色难题之一,没有收音机软件,网页版电台又都要求你装 “Windows Media Player”。今天得到并验证了一个好消息:新浪微博配套的在线收音机应用 “微电台” 开始支…

FAT16/23 DBR 格式说明

Boot Sector and BPB Structure…

Android实现全屏正确方法介绍

Android手机操作系统是由谷歌推出的一款基于Linux的开源手机操作系统。我们可以在模拟器中对其进行相应的操作来实现各种功能以满足用户的需求。在这里就简要介绍一下Android实现全屏的相关方法。新版本的Android Framework和老版本的实现起来有些不同。这里只给出新版本的Androi…

透明位图显示

想到透明位图,找了找资料,有几种实现,并理解了下,掩码机制(其实就是数据的逻辑操作)。 …

练习的mysql语句

 例子:将cdb_pms表subject字段中的Welcom to替换成 欢迎光临UPDATE `cdb_pms`SET `subject` = REPLACE(`subject`, 'Welcome to', '欢迎光临')WHERE INSTR(`subject`,'Welcome t…

在ios上使用Google analytics

在ios上使用Google analytics,今天简单地测试了一下,总结: Google analytics使用分为普通web(移动web),及app(包括移动app).ios app访问记录,需要几个库: (libGoogleAnalytics.a,CFNetwork,libsqlite3.…

发表评论

访客

看不清,换一张

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