内存管理
前面学习了FSMC外设驱动外部SRAM,拓展STM32F407的内存,而且STM32F407本身就有192K的内存。
下面是对内存的动态管理。
1、内存管理简介
内存管理就是,在软件运行时对计算机的内存资源进行分配和使用。主要目的就是如何高效、快速的分配,并在适当的时候回收这些资源。内存管理的实现方法有很多中,主要实现的是两个 函数:malloc、free。
下面介绍一个一个简单的方法来实现:分块式内存管理。
从图片中,可以看出内存管理分为内存池和内存管理表。内存池和内存管理表都分为N块,并且一一对应。
其中内存管理表的项值代表着内存池中占用的数量。当项值为0时,表示未有内存被占用。当项值为10,表示有10个内存块被占用。
内存分配的方向是从顶到低。即寻找最低端的空内存。当内存初始化时,内存表会被清空。
分配原理
当指针调用malloc内存分配函数时,首先要知道指针需要的内存块数,然后从第N项开始,向下寻找,知道找到指针需要的内存块数,最后,把这个空内存块的地址放回给指针。如果内存不足,则返回NULL。
释放原理
当指针的内存使用完成后,需要释放时,调用free内存释放函数。free函数会根据传入的指针,找到其指向的内存块,在找到相对应的内存管理表项,根据其项值,知道了使用的内存块数量,然后将这个写内存块全部清零。