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