做开发时间长了,经常会发现自己经常重复发明轮子。% D8 t& U: U1 f1 c- P 例如做触摸屏,开始不知道有tslib,自己做校正算法,效果不好,用了tslib后,一切都好了。 内存分配也是。4 j+ c5 p9 Y8 } N 很多朋友可能直接用c库的malloc和free,能用,但是要增加一些功能,就不好处理了。 像freertos、lwip等开源组件,其实也有自己的内存算法。 有不少朋友也自己写过内存分配算法。 其实有一种内存分配算法,k&R方法,就在我们的c语言书上。 可惜以前学C语言的时候,后面一些章节根本不考试,大部分人都不知道这种算法了。 n1 B/ G, W4 ]5 B6 Q' u; t' N* { 这本书就是《C程序设计语言》,如果你有这本书,请翻到162页。 这种算法通过空闲内存链表管理内存。只有两个函数。非常精简的函数。6 l! @ }- V4 i3 r" o 在这个基础上,我们可以做很多优化:+ T( [5 P3 K& N. Q0 [0 a 1 将首先适应法改为最适应法,降低内存碎片化程度。 2 增加已分配内存链表,管理已分配内存,统计各模块使用内存量。 3 添加小内存分配二级算法,在出现频繁大量申请小内存(小于16字节的内存申请)时,提高内存利用率。# |7 a* Q* L- |' k) ^ 4 利用原来的内存管理结构,进行内存染色,侦测malloc的内存越界问题。 。。。# @$ H3 W$ E# E' i 有兴趣的请下载附件。 附件仅仅实现了上面说的优化1,其他优化已经实现,还在优化当中。( K! w5 g/ I: ^9 N ' u$ a f" ?& q1 n* b" n& {5 ` 欢迎参观github:http://github.com/wujique/stm32f4072 F8 k: G5 z: u: A0 s( h" M 这个仓库为本人基于F407做的一些程序总结。# P, ?: k7 f5 M9 o8 u- @$ k 个人认为比较有参考意义的有:I2C核心,SPI控制器和SPI通道核心,SPI FLASH,LCD总线抽象,LCD驱动抽象。 欢迎商用,后果自负。) h3 {* w+ b8 u 4 |9 \0 I+ s- ?+ q$ G0 o) [$ F |
alloc.rar
下载487.69 KB, 下载次数: 25
主要是造轮子的时候要多思考,思考别人的库为什么就比自己写的要好,好在哪里。
github上有
mark 下