简单的学习了一下malloc的原理后花了几天编写和测试的,
malloc 的原理的资料大家可以看我之前发的帖子 http://www.openedv.com/posts/list/7332.htm
本来想把代码的原理也解释清楚,昨晚写了一个小时发现不好写,然后电脑突然死机也就没了,
不好写就算了,以后有时间再写详细些补上,基本原理也可以参考那个帖子里的资料。
上传的是测试代码,测试函数有 Test1 和 Test2,两个函数基本一样
函数 Test1 和 Test2 的不同之处在于局部变量数组 array 的类型不同,
另外为了突出碎片整理的优势,Test1 最后一次会申请 80 字节但是失败,而 Test2 最后一次会申请 300 字节而且成功。
测试代码会在串口里返回很多信息,也可以直接通过软件仿真来看,信息很长,大概的结构是这样的:
初始化信息...
Test1: 智能指针功能测试
申请内存...
释放部分内存...
再次申请80字节内存,结果申请失败
Test1结束,原来申请的内存全部释放
Test2: 碎片整理功能测试
申请内存...
释放部分内存...
再次申请300字节内存,结果申请成功
Test1结束,原来申请的内存全部释放
...
也有些许多不完善的地方,分配的算法和碎片整理算法效率并不高,不过对于 stm32 这样的内存不大的 MCU 我认为已经够用了。
还有一点比较致命的就是 thread-safe,也就是多线程的时候的安全性,不过反正现在不搞OS,暂时不考虑这个问题。
主要的代码在 main 文件夹下的 allocator.h 和 allocator.cpp
|