内存分配算法概要1.pptx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存分配算法概要1

嵌入式系统三级项目 主要内容 内存分配的方法:FF、BF、WF和NF 内存管理的一些指令malloc()、realloc()和free() 内存保护 最佳适合内存分配算法BF 最先适合内存分配算法FF 最差适合内存分配算法WF 循环首次适应分配算法NF 最先适合内存分配算法(FF) 一、空闲分区按照地址递增的次序链接 二、从链头开始查找,选择第一个满足要求的空闲区 优点:尽可能的利用存储器的低地址部分 缺点:搜索次数增加,影响工作效率 一、空闲分区按从小到大进行排序 二、自表头开始查找到第一个满足要求的自由分区分配 优点:使碎片尽量小,保留大的空闲区 缺点:造成许多难利用的小空闲区,分配后必须重新排序 最佳适合分配算法BF 最差适合分配算法(WF) 一、空闲分区按从大到小进行排序 二、自表头开始查找到第一个满足要求的自由分区分配 优点:尽量减少小的碎片产生 缺点:缺乏大的空闲分区,分配完需要重新排序 循环首次分配算法 一、空闲分区按地址递增的次序链接 二、从上次找到空闲区的下一个空闲开始查找,选择第一个满足要求的空闲区 优点:使内存中的空闲区分布得较均匀 缺点:缺乏大的空闲分区 以FF算法为例 输入1,设置内存的大小 输入3,建立一个新进程并设置内存大小 重复上一步骤,建立第二个进程,大小一样 输入5,显示内存使用情况 输入4,选择结束第二个进程 输入5,再次查看内存使用情况 指令malloc()内存分配函数 void *malloc(int size); malloc 向系统申请分配指定size个字节的内存空间 返回类型是 void* 类型。void* 表示未确定类型的指针,返回后强行转换为实际类型的指针 int* p;  p = (int *) malloc (sizeof(int)); 如果写成p = malloc (sizeof(int)); 则程序无法通过编译 函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小 指令free()内存释放函数 void free(指针变量) free可以释放任意类型的指针 举例:int* p = (int *) malloc(4); *p = 100; free(p); //释放 p 所指的内存空间 new/delete、new[]/delete[]、malloc/free 三对均需配套使用,不可混用! 指令realloc()内存重新分配函数 void *realloc(void *mem_address, unsigned int newsize); 改变mem_address所指内存区域的大小为newsize长度 如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL 当内存不再使用时,应使用free()函数将内存块释放 如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。 并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针 如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null.而原来的内存块保持不变 内存保护 内存保护可通过硬件提供的MMU来实现 MMU具有以下功能: 1、内存映射(逻辑地址→物理地址) 2、防止地址越界:通过检查逻辑地址,确保应用程序只能访问地址空间所对应的、限定的物理地址空间 3、防止操作越界:如果对内存页面的访问违背了内存页面的特权信息,MMU产生异常 简单的MMU保护模式 谢谢

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档