2019-07-21 06:02发布
正点原子 发表于 2019-1-8 15:59 当然可以嵌套使用
林光华ing 发表于 2019-1-9 09:51 我试着说说: 假设内存管理中没有关中断或者任务调度, 最危险情况:在低优先级任务A正在申请内存或者释 ...
最多设置5个标签!
谢谢原子哥。我现在项目使用FreeRTOS的heap_4做内存管理,在任务中很多地方业务上使用内存管理,任务在切换时由嵌套使用内存管理的情况(A任务还没释放内存,B任务又申请)导致内存泄露。现在在想一个办法解决这种嵌套的问题,原子哥有什么好办法
我试着说说:
假设内存管理中没有关中断或者任务调度,
最危险情况:在低优先级任务A正在申请内存或者释放时,没有完成完整的操作,就被高优先级任务B打断,B任务中也申请一段内存。
对于任务A而言,任务B申请了内存,然后释放。这个过程A什么都不能做,而B拿了内存又放回,内存管理的相关全局变量恢复之前状态,所以A没有受到什么影响。当然,假如内存管理的相关全局变量不能恢复之前状态,就会受到影响。
对于任务B而言,本身是高优先级任务,它本身申请内存,当然不会收到低优先级任务A的破坏。
mymalloc应该是不可重入函数吧?
一周热门 更多>