原子哥的动态内存管理,能不能嵌套使用?

2019-07-21 06:02发布

原子哥的动态内存管理,能不能嵌套使用?比如我在程序任务A中申请了内存,然后任务切换到任务B,又申请了一块内存,任务B释放内存后任务切换到任务A释放内存。像这样的嵌套会不会出错?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-21 10:42
 精彩回答 2  元偷偷看……
zcz0426
2楼-- · 2019-07-21 10:47
正点原子 发表于 2019-1-8 15:59
当然可以嵌套使用

谢谢原子哥。我现在项目使用FreeRTOS的heap_4做内存管理,在任务中很多地方业务上使用内存管理,任务在切换时由嵌套使用内存管理的情况(A任务还没释放内存,B任务又申请)导致内存泄露。现在在想一个办法解决这种嵌套的问题,原子哥有什么好办法
二九结狐六体
3楼-- · 2019-07-21 12:02
是可以的了!
林光华ing
4楼-- · 2019-07-21 17:53
本帖最后由 林光华ing 于 2019-1-9 09:54 编辑

我试着说说:
假设内存管理中没有关中断或者任务调度,
最危险情况:在低优先级任务A正在申请内存或者释放时,没有完成完整的操作,就被高优先级任务B打断,B任务中也申请一段内存。
对于任务A而言,任务B申请了内存,然后释放。这个过程A什么都不能做,而B拿了内存又放回,内存管理的相关全局变量恢复之前状态,所以A没有受到什么影响。当然,假如内存管理的相关全局变量不能恢复之前状态,就会受到影响。
对于任务B而言,本身是高优先级任务,它本身申请内存,当然不会收到低优先级任务A的破坏。


Marvelous
5楼-- · 2019-07-21 22:47
林光华ing 发表于 2019-1-9 09:51
我试着说说:
假设内存管理中没有关中断或者任务调度,
最危险情况:在低优先级任务A正在申请内存或者释 ...

mymalloc应该是不可重入函数吧?
林光华ing
6楼-- · 2019-07-22 04:25
 精彩回答 2  元偷偷看……

一周热门 更多>