一、简介: 对于内存的管理主要是用来管理MCU在运行过程中内存资源的分配和使用问题,主要解决的问题是如何高效和快速的分配,并在适当时候回收内存资源,内存管理的方法也有很多种,但是最终都是在解决两个函数:malloc(内存申请)和free(内存释放)。 二、分块式内存管理原理 存储方式:在这里介绍有关分块式内存管理的原理,对于分块式内存管理由内存池和内存管理表两部分组成,内存池被等分为n块,对应内存管理表大小也为n,内存管理表的一项对应内存池的一块内存。 内存管理表:当内存管理表中的该项值为0时,表示该块内存未被占用,当该项值不为0时表示该项对应的内存块已被占用,而其值表示被连续占用的内存块数,例如如果该项值为10,则表示有连续的10块内存被占用。 内存分配:对于内存的分配,内存分配方向为从内存池顶部向底部分配。在内存初始化后内存管理表中的值都为0,表示没有内存被占用。 三、分块式内存管理的内存分配原理 当指针p调用malloc函数分配内存的时候,首先根据需要内存大小判断需要的内存块数目,例如需要m个内存块,然后从n项开始向下查找,如果有连续的m块内存没有被占用(即内存管理表中的值为0),则将这连续的m块内存对应的内存管理表内存设置为m,标志该段内存被占用。再将最后为空内存的那个内存块地址返回给p,完成一次内存的分配!如果遍历这个内存池都没有发现需要的内存大小,内存分配失败。 四、分块式内存管理的内存释放原理 当需要释放内存时,p调用free函数,free函数首先判断p指向的地址所在的内存池,通过内存池找到对应的内存管理表项,取得内存管理表项中的值m,将这连续的m个内存管理表项清0,完成一次内存释放。
|