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