动态内存管理,支持内存碎片自动管理。

2019-07-21 00:26发布

本帖最后由 feisheng168 于 2016-1-3 09:42 编辑

放假里晚上就睡得晚,没有睡得兄弟晚上好:
下面我给大家分享一下我掌机的动态内存管理。说起动态内存管理,我研究了有半年多,一年前写出了一个我认为还完美的动态内存管理,现在分享给大家。

动态内存有以下优点:
1,它的操作和我们在电脑上一样操作,函数名一模一样;

2,他可以移植到任何处理器芯片和单片机;
3,支持内存碎片自动管理功能;
4,在任意地方可以了申请和释放,不用考虑释放和申请顺序(因为它有内存碎片自动管理功能);

这款评估板,代码是一年前写的,由于写好没有详细整理过。所以有点乱,希望大家谅解。

有兴趣的兄弟可以移植玩玩。
配置讲解:STM32F4为例
#define MAX_SIZE          110*1024                      //总字节数 = MAX_BLOCK * MIN_SIZE
#define MIN_SIZE          32                                //最小分配空间字节大小   
#define MAX_BLOCK      50                                //记录块大小  块大小必须 < MAX_SIZE/MIN_SIZE,注意不可等于因为内存对齐时预留空间。
#define END_BLOCK      MAX_BLOCK-1                //记录块末端块

#define  MEM_UINT       unsigned int
#define  MEM_UCHAR     unsigned char        
#define  MEM_INT         int

/*****配置只需下面两步填写******/
#define MAX_SIZE          110*1024                        //总字节数 = MAX_BLOCK * MIN_SIZE
#define MAX_BLOCK        50                                //记录块大小  块大小必须 < MAX_SIZE/MIN_SIZE,注意不可等于因为内存对齐时预留空间。

1.MAX_SIZE:这个是动态内存大小;
2.MAX_BLOCK:最多动态内存分的块。
3.调用时必须初始化:mymeminit();内存块初始化函数.  

/*****下面这个就是根据不同单片机修改*******/
#define  MEM_UINT           unsigned int
#define  MEM_UCHAR     unsigned char        
#define  MEM_INT          int

具体管理多个内存的方法大家可以上面的
在malloc.c里面将分区表多定义几个就可以了。

附件: mem.rar (4 KB, 下载次数: 1328) 2016-1-3 00:25 上传 点击文件名下载附件

下一个分享的就是I2C软解码库,这个I2C配置也简单,也可以移植到所有单片机,它可以支持不同总线数量目前可以达到250个通道,自动识别ACK,和等待识别ACK等功能。




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
aozima
1楼-- · 2019-07-21 17:29
本帖最后由 aozima 于 2016-1-3 17:35 编辑

没有MMU的系统上面碎片怎么个整理法?
楼主说的是自动合并空闲内存吧?
正点原子
2楼-- · 2019-07-21 18:45
来张图片看看: 无标题.png

还请楼主指点下。

正点原子
3楼-- · 2019-07-21 23:27
主要是9楼的问题,无法解决。
所以,我一直没有办法实现碎片整理。
lvehe
4楼-- · 2019-07-22 00:14
本帖最后由 lvehe 于 2016-1-3 18:32 编辑

碎片整理需要移动已经分配的内存块吗
正点原子
5楼-- · 2019-07-22 02:27
lvehe 发表于 2016-1-3 18:27
碎片整理需要移动已经分配的内存块吗

必须的啊,不然怎么叫碎片整理。。。。
就是把很多小的内存片,组合成一个大的内存片,方便给需要调用的地方调用。
正点原子
6楼-- · 2019-07-22 03:52
lvehe 发表于 2016-1-3 18:27
碎片整理需要移动已经分配的内存块吗

所谓的内存碎片,也就是小的内存申请释放次数多了,而产生的。

一周热门 更多>