- 6
- 0
- 约5.45千字
- 约 31页
- 2018-08-20 发布于江苏
- 举报
第三节:首次适应法的分析
* malloc(),mfree() 2015.4.7星期二(双周) 深刻理解计算机 上机编程:分配器 首次适应算法、最佳适应算法、下一次适应算法 首次适应算法分析 #includestdlib.h void *malloc(size_t,size); malloc函数返回一个指针,指向大小为至少size字节的存储器块。 如果malloc遇到问题,那么返回NULL。 注意:与教材中的malloc函数不同。 free函数释放已经分配的malloc块 #includestdlib.h void free(void *ptr) Ptr参数必须指向一个从malloc获得的已经分配块的起始位置。 malloc和free分配和释放块 1 2 3 4 malloc(4*sizeof(int)) 1 2 3 4 5 6 7 8 9 malloc(5*sizeof(int)) 1 2 3 4 free 第二次分配的5个int 1 2 3 4 5 6 malloc(2*sizeof(int)) malloc算法分析 首次适应算法:从头开始搜索空闲链表,选择第一个合适的空闲块。 将大的空闲块保留在链表的后面。链表起始处留下小的空闲块的碎片,增加了对较大块的搜索时间。 首次适应算法速度很快,因为它尽可能少地搜索链表结点。 下一次适应算法和首次适应算法很相似,是不过不是从链表的起始处开始每次搜索,而是从上一次查询结束的地方开始。 若上一次在一个空闲块中发现足够的空间,那么这一次也能在这个剩余块中发现所需空间。 比首次适应算法快,利用率却低。 最佳适应算法检查数组的每一个空闲块,选择适合所需请求大小的最小空闲块。 内存管理:使用coremap[] coremap[]按照map的起始地址排序。 首次适应算法 存储管理器对coremap[]进行搜索,直到找到一个足够大的空闲区。 若空闲区大小和要分配的空间大小正好一样,否则将该空闲区分为两部分,一部分供进程使用,另一部分形成新的空闲区。 教材p77的例题 例题1. coremap[]: 进程申请空间大小是15 (1)搜索coremap[],找到第一个长度=15的空闲区 20 10 coremap[2] 50 30 coremap[1] 100 20 coremap[0] 0 coremap[CMAPSIZ] …… 20 10 coremap[0] m_size=3015,首次找到一个足够大的空闲区 50 30 coremap[1] m_size=1015 (2)空闲区的分配 新的coremap[]数组 50 30 coremap[1] 分配15个块出去,则: m_size=30-15=15, m_addr=50+15=65。 20 10 coremap[2] 65 15 coremap[1] 100 20 coremap[0] 0 coremap[CMAPSIZ-1] …… 教材p78的例题 例题2. coremap[]: 进程申请空间大小是30 (1)搜索coremap[],找到第一个长度=15的空闲区 20 10 coremap[2] 50 30 coremap[1] 100 20 coremap[0] 0 coremap[CMAPSIZ] …… 20 10 coremap[0] m_size=30=30,首次找到一个足够大的空闲区 50 30 coremap[1] m_size=1015 例题2 (2)空闲区的分配 若m_size==0,则应删除这个元素,coremap[]数组剩下的元素向前移动一个位置。 50 30 coremap[1] 分配30个块出去,则: m_size=30-30=0, m_addr=50+30=80 20 10 100 20 coremap[1] coremap[0] 0 coremap[CMAPSIZ-2] …… 80 0 coremap[1]有变化 malloc()函数 malloc(mp,size) Struct map *mp; { register int a; //a是malloc返回的分配区的起始块号 register struct map *bp; //bp是工作块 malloc() for(bp=mp;bp-m_size;bp++) //搜索coremap[] if(bp-m_size=size) //找到第一个空白区m_size=size,则分配。 a=bp-m_addr; //返回值为分配区域的起始块号 bp-m_addr=+size; //空白区的起始地址变化 if((bp-m_size=-size)==0) //若此
您可能关注的文档
最近下载
- 《洁净室施工及验收规范》(GB50591-2010).pdf VIP
- 钻井平台钻前工程初步设计-道路.pdf VIP
- 中国法制史试题及答案完整版 .pdf VIP
- 蓝色云南大学顶部导航栏复试模板.pptx VIP
- 湖北工程学院新技术学院《高等数学A》2025-2026学年期末考试试卷(A)卷.docx VIP
- GB 55006-2021 钢结构通用规范.docx VIP
- GB 55002-2021 建筑与市政工程抗震通用规范.docx VIP
- GB 55001-2021 工程结构通用规范.docx VIP
- GB50068-2018_建筑结构可靠性设计统一标准.docx VIP
- 执行结构设计.pdf VIP
原创力文档

文档评论(0)