MQX内存管理的缺陷-申请大量内存块后释放速度会变慢

2020-02-20 20:53发布

  我们的实际应用中需要申请大量的内存块,内存块大小不同,这时如果要释放其中的某一个内存块,需要很长时间而且这段时间是无法响应中断的,严重影响了产品。
  我学习了下MQX关于内存管理这部分的代码,发现MQX将申请的内存块作为一个单向链表,释放时每次都遍历很长时间才能找到需要释放的内存块,而且这期间代码
内有明确的关中断。不知道其他坛友是否也碰到过这个问题?
  这部分代码我自己修改了部分,减少了遍历时间,但是感觉MQX在内存管理部分有些混乱,官方是不是考虑更新一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
0flame0
1楼-- · 2020-02-21 10:25
fengyunyu 发表于 2014-11-7 12:26
从LZ描述看,并不是一直慢,而是释放内存的时间过长,且关了中断,相当于“假死机”。 ...

对,我看了看我们需要释放近8000个内存块,需要等很长时间其他任务才会执行,因为定时器中断无法响应了
0flame0
2楼-- · 2020-02-21 14:10
官方自带了很多内存使用方法,自己开辟内存池自己管理是种方法,我们也考虑过了,也实现了这种方法
wxfje
3楼-- · 2020-02-21 16:49
“需要很长时间而且这段时间是无法响应中断的”,这样的话几乎算是不能用
楼主可以参考ucos的存储管理
dr2001
4楼-- · 2020-02-21 17:18
用户代码对内存的使用最好具有特定的模式,然后自己有针对性的实现一个内存分配器。

通用的内存分配器总会在实现的时候有取舍;据说实时系统效率比较高的是TLSF那个分配器。
0flame0
5楼-- · 2020-02-21 22:43
 精彩回答 2  元偷偷看……
wangpengcheng
6楼-- · 2020-02-22 02:10
5楼正解!还有,有时候可以将任务栈做大一点,直接用局部变量!速度会快一些!

一周热门 更多>