
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
虚拟内存的应用在许多软件编程开发项目中都是会经常用到的一个编程技术,而本文我们就通过案例分析来简单了解一下,虚拟内存应用方法分享。
1、写时复制(copy-on-write)
私有对象使用一种叫做写时复制(copy-on-write)的技术巧妙地映射到内存中。一个私有对象开始生命周期的方式和共享对象的一样,在物理内存中只保留私有对象的一份副本。
对于每个映射私有对象的进程,相应私有区域的页表条目都被标记为只读,并且区域结构被标记为私有的写时复制。如果有一个进程试图修改私有区域的某个页面,那这个写操作会触发一个保护故障。
2、动态内存(dynamicmemory)分配
动态内存分配器维护着一个进程的虚拟内存区域,称为堆(heap)。紧接未初始化的数据区域后面开始向上(高地址增长)。对于每一个进程,内核维护者一个变量brk(break),它指向堆的顶部。
分配器有两种基本的风格。两种风格都要求应用显式分配块。不同之处在于那个实体负责释放已分配块。显式分配器(explicitallocator),Cmalloc函数与free函数;隐式分配器(implicitallocator),要求分配器检测一个已分配块何时不被程序使用时释放块。隐式分配器也叫做垃圾收集器(garbagecollector),而自动释放未使用的已分配块的过程叫做垃圾收集,例如Java。
3、垃圾收集
垃圾收集器(garbagecollector)是种动态内存分配器,它自动释放程序不再需要的已分配块。垃圾收集器将内存视为一张有向可达图。
Java的垃圾收集器,对于创建指针比较有严格的规定,能够维护可达图的精准表达。
4、Mark&Sweep垃圾收集器
Mark&Sweep垃圾收集器由标记(mark)阶段和清除(sweep)阶段组成,标记阶段标记出根节点的所有可达的和已分配的后继,而后面清除阶段释放每个未被标记的已分配的块。块头部中空闲的低位中的一位通常用来表示这个块是否被标记。
C使用Mark&Sweep垃圾收集器来处理的时候是必须保守的,其根本原因是因为C不会使用类型信息来标记内存位置。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。