内存分配算法精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 一、空闲分区按从大到小进行排序 • 二、自表头开始查找到第一个满足要求的
自由分区分配
• 优点:尽量减少小的碎片产生 • 缺点:缺乏大的空闲分区,分配完需要重
新排序
循环首次分配算法
• 一、空闲分区按地址递增的次序链接 • 二、从上次找到空闲区的下一个空闲开始
查找,选择第一个满足要求的空闲区
• 优点:使内存中的空闲区分布得较均匀 • 缺点:缺乏大的空闲分区
应用1
应用2
应用3
操作Hale Waihona Puke Baidu统
简单的MMU保护模式
学习总结
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
You Know, The More Powerful You Will Be
• 如果原先的内存大小后面还有足够的空闲空间用来分配, 加上原来的空间大小= newsize
• 如果原先的内存大小后面没有足够的空闲空间用来分配, 那么从堆中另外找一块newsize大小的内存。 并把原来大 小内存空间中的内容复制到newsize中。返回新的 mem_address指针
• 如果没有足够可用的内存用来完成重新分配(扩大原来 的内存块或者分配新的内存块),则返回null.而原来的内 存块保持不变
回后强行转换为实际类型的指针
• 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()函数将内存块释放
以FF算法为例
输入1,设置内存的大小
输入3,建立一个新进程并设置内存大小
重复上一步骤,建立第二个进程,大小一样
输入5,显示内存使用情况
输入4,选择结束第二个进程
输入5,再次查看内存使用情况
指令malloc()内存分配函数
• void *malloc(int size); • malloc 向系统申请分配指定size个字节的内存空间 • 返回类型是 void* 类型。void* 表示未确定类型的指针,返
优点:尽可能的利用存储器的低地址部分 缺点:搜索次数增加,影响工作效率
最佳适合分配算法BF
• 一、空闲分区按从小到大进行排序 • 二、自表头开始查找到第一个满足要求
的自由分区分配
• 优点:使碎片尽量小,保留大的空闲区 • 缺点:造成许多难利用的小空闲区,分
配后必须重新排序
最差适合分配算法(WF)
内存保护
• 内存保护可通过硬件提供的MMU来实现 • MMU具有以下功能: • 1、内存映射(逻辑地址→物理地址) • 2、防止地址越界:通过检查逻辑地址,确
保应用程序只能访问地址空间所对应的、 限定的物理地址空间
• 3、防止操作越界:如果对内存页面的访问 违背了内存页面的特权信息,MMU产生异 常
嵌入式系统三级项目
主要内容
• 内存分配的方法:FF、BF、WF和NF • 内存管理的一些指令malloc()、realloc()和free() • 内存保护
最先适合内存分配算法FF 最佳适合内存分配算法BF 最差适合内存分配算法WF 循环首次适应分配算法NF
最先适合内存分配算法(FF)
一、空闲分区按照地址递增的次序链接 二、从链头开始查找,选择第一个满足要求 的空闲区
结束语
当你尽了自己的最大努力时,失败也是伟大的, 所以不要放弃,坚持就是正确的。
When You Do Your Best, Failure Is Great, So Don'T Give Up, Stick To The End 演讲人:XXXXXX 时 间:XX年XX月XX日
自由分区分配
• 优点:尽量减少小的碎片产生 • 缺点:缺乏大的空闲分区,分配完需要重
新排序
循环首次分配算法
• 一、空闲分区按地址递增的次序链接 • 二、从上次找到空闲区的下一个空闲开始
查找,选择第一个满足要求的空闲区
• 优点:使内存中的空闲区分布得较均匀 • 缺点:缺乏大的空闲分区
应用1
应用2
应用3
操作Hale Waihona Puke Baidu统
简单的MMU保护模式
学习总结
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
You Know, The More Powerful You Will Be
• 如果原先的内存大小后面还有足够的空闲空间用来分配, 加上原来的空间大小= newsize
• 如果原先的内存大小后面没有足够的空闲空间用来分配, 那么从堆中另外找一块newsize大小的内存。 并把原来大 小内存空间中的内容复制到newsize中。返回新的 mem_address指针
• 如果没有足够可用的内存用来完成重新分配(扩大原来 的内存块或者分配新的内存块),则返回null.而原来的内 存块保持不变
回后强行转换为实际类型的指针
• 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()函数将内存块释放
以FF算法为例
输入1,设置内存的大小
输入3,建立一个新进程并设置内存大小
重复上一步骤,建立第二个进程,大小一样
输入5,显示内存使用情况
输入4,选择结束第二个进程
输入5,再次查看内存使用情况
指令malloc()内存分配函数
• void *malloc(int size); • malloc 向系统申请分配指定size个字节的内存空间 • 返回类型是 void* 类型。void* 表示未确定类型的指针,返
优点:尽可能的利用存储器的低地址部分 缺点:搜索次数增加,影响工作效率
最佳适合分配算法BF
• 一、空闲分区按从小到大进行排序 • 二、自表头开始查找到第一个满足要求
的自由分区分配
• 优点:使碎片尽量小,保留大的空闲区 • 缺点:造成许多难利用的小空闲区,分
配后必须重新排序
最差适合分配算法(WF)
内存保护
• 内存保护可通过硬件提供的MMU来实现 • MMU具有以下功能: • 1、内存映射(逻辑地址→物理地址) • 2、防止地址越界:通过检查逻辑地址,确
保应用程序只能访问地址空间所对应的、 限定的物理地址空间
• 3、防止操作越界:如果对内存页面的访问 违背了内存页面的特权信息,MMU产生异 常
嵌入式系统三级项目
主要内容
• 内存分配的方法:FF、BF、WF和NF • 内存管理的一些指令malloc()、realloc()和free() • 内存保护
最先适合内存分配算法FF 最佳适合内存分配算法BF 最差适合内存分配算法WF 循环首次适应分配算法NF
最先适合内存分配算法(FF)
一、空闲分区按照地址递增的次序链接 二、从链头开始查找,选择第一个满足要求 的空闲区
结束语
当你尽了自己的最大努力时,失败也是伟大的, 所以不要放弃,坚持就是正确的。
When You Do Your Best, Failure Is Great, So Don'T Give Up, Stick To The End 演讲人:XXXXXX 时 间:XX年XX月XX日