0%

内存管理

内存管理

前面学习了FSMC外设驱动外部SRAM,拓展STM32F407的内存,而且STM32F407本身就有192K的内存。

下面是对内存的动态管理。

1、内存管理简介

内存管理就是,在软件运行时对计算机的内存资源进行分配和使用。主要目的就是如何高效、快速的分配,并在适当的时候回收这些资源。内存管理的实现方法有很多中,主要实现的是两个 函数:malloc、free。

下面介绍一个一个简单的方法来实现:分块式内存管理。

从图片中,可以看出内存管理分为内存池和内存管理表。内存池和内存管理表都分为N块,并且一一对应。

其中内存管理表的项值代表着内存池中占用的数量。当项值为0时,表示未有内存被占用。当项值为10,表示有10个内存块被占用。

内存分配的方向是从顶到低。即寻找最低端的空内存。当内存初始化时,内存表会被清空。

分配原理

当指针调用malloc内存分配函数时,首先要知道指针需要的内存块数,然后从第N项开始,向下寻找,知道找到指针需要的内存块数,最后,把这个空内存块的地址放回给指针。如果内存不足,则返回NULL。

释放原理

当指针的内存使用完成后,需要释放时,调用free内存释放函数。free函数会根据传入的指针,找到其指向的内存块,在找到相对应的内存管理表项,根据其项值,知道了使用的内存块数量,然后将这个写内存块全部清零。