网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.公平理论在项目管理中的作用.
.从六个角度分析流程建模.
.项目规划技巧.
..NET设计模式研究之装饰模式.
.设计.NET应用程序数据访问层五大.
.软件架构浅谈:问题域及其解决方.
.SOA破解集成难题 新一代软件架构.
.嵌入式软件测试的十大秘诀.
.IOS 软件结构读书笔记.
.汉化软件的测试综述.
.在Avalon中建立数据识别的应用程.
.终极SOA技术.
.BEA成为企业部署SOA的首选合作伙.
.项目管理:计划与跟踪过程.
..NET设计模式之工厂方法模式.
.解析.NET框架下的数据类型转化技.
.软件开发商如何实现高效管理(1).
.Micosoft实时通信API多媒体支持慨.
.编程不难学?.
.对项目开发中几种测试类型的理解.

Linux的用户进程是如何使用内存的

发表日期:2008-3-23


Linux的用户进程是如何使用内存的   Linux进程使用内存的基本流程:   Linux的用户进程是如何使用内存的(图一)
点击查看大图
图1 从上图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆治理策略上的(也就是glibc的动态内存分配策略上),堆的治理是由glibc进行的。 所以我们调用free对malloc得到的内存进行释放的时候,并不是直接释放给操作系统,而是还给了glibc的堆治理实体,而glibc会在把实际的物理内存归还给系统的策略上做一些优化,以便优化用户任务的动态内存分配过程。   那么glibc的堆治理器在什么时候才把物理内存归还给系统呢? 它会从堆的最大线性地址开始,从后向前计算用户任务当前有多少空闲的堆内存(直到碰到使用中的堆内存地址为止),比如在下图中, Linux的用户进程是如何使用内存的(图二) 图2 它会认为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给系统。而在中间的“未使用”内存是不会归还给系统的,所以系统也不可能再利用这块物理内存页(我们假设系统没有swap区和swap文件),也就是说系统的内存会为此减少,除非在它之前的堆内存都用free进行释放以后,glibc的堆治理器才有可能(只是有可能)把该段内存归还给系统。
  由此,我们在使用malloc/free时应该小心,非凡是在初始化时分配了好多内存,但是在这之后却再也不需要这么多的内存了,而这块内存又没有达到threshhold值或者在堆的最高线性地址处有某块内存没有释放,但是它前面的所有堆内存都释放了;这种情况下,用户任务将会浪费一些物理内存,这在资源比较紧张的嵌入式系统中是不可容忍的。
上一篇:[译]管理Windows 2000 Pro中的DNS客户端缓存 人气:731
下一篇:某政府网站被加入的自动下载病毒文件的代码再创新花样(第1版) 人气:506
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐