做开发时间长了,经常会发现自己经常重复发明轮子。 例如做触摸屏,开始不知道有tslib,自己做校正算法,效果不好,用了tslib后,一切都好了。 内存分配也是。4 c* h B/ N3 B* x 很多朋友可能直接用c库的malloc和free,能用,但是要增加一些功能,就不好处理了。! s# K& F) ^# Q0 e2 ~7 K# k 像freertos、lwip等开源组件,其实也有自己的内存算法。 有不少朋友也自己写过内存分配算法。 其实有一种内存分配算法,k&R方法,就在我们的c语言书上。9 O; o0 y8 N% g- l& b7 n 可惜以前学C语言的时候,后面一些章节根本不考试,大部分人都不知道这种算法了。 这本书就是《C程序设计语言》,如果你有这本书,请翻到162页。+ t6 H" J: K; i9 I& m" r4 p 这种算法通过空闲内存链表管理内存。只有两个函数。非常精简的函数。 在这个基础上,我们可以做很多优化: 1 将首先适应法改为最适应法,降低内存碎片化程度。 2 增加已分配内存链表,管理已分配内存,统计各模块使用内存量。 3 添加小内存分配二级算法,在出现频繁大量申请小内存(小于16字节的内存申请)时,提高内存利用率。1 f9 t- s1 e5 r3 \5 p9 [5 R+ A 4 利用原来的内存管理结构,进行内存染色,侦测malloc的内存越界问题。0 o0 f: @9 [+ ^6 L5 R" h5 n 。。。 有兴趣的请下载附件。 附件仅仅实现了上面说的优化1,其他优化已经实现,还在优化当中。8 V9 G) Y* U) l. [4 p : _9 S& K5 u9 x! [ 欢迎参观github:http://github.com/wujique/stm32f407 这个仓库为本人基于F407做的一些程序总结。 个人认为比较有参考意义的有:I2C核心,SPI控制器和SPI通道核心,SPI FLASH,LCD总线抽象,LCD驱动抽象。 欢迎商用,后果自负。6 T$ S: o* E2 @" J0 r |
alloc.rar
下载487.69 KB, 下载次数: 25
主要是造轮子的时候要多思考,思考别人的库为什么就比自己写的要好,好在哪里。
github上有
mark 下