原帖 | Jack | 2025-02-24 16:26 | 👍0 | 阅读约1
老师,请问下stm32单片机跑时间片轮询架构,什么时候需要用到动态内存管理,我现在公司做的充电桩产品,常用到can通讯、485通讯,东西不算多,但是使用这些通讯的模块很多,需要用到动态内存管理malloc吗?
答:
不建议用C标准库的malloc,要么只在启动阶段有限的malloc,在整个生命周期不free,不要在产品运行周期内频繁malloc和free,内存碎片必定产生,且malloc时间并不确定,容易产生偶现问题。
另外,你应该没有业务是不能靠一个有限内存区域来解决的。如果你非要优雅,那么可以自己重写malloc来实现一个有限内存池,确保malloc的时间确定,且不会产生内存碎片。
比较常见的内存池是,一个数组构成的内存池,用两个队列维护,队列A是存当前空闲的内存单元,队列B是存正在被使用的内存单元。需要malloc的时候,就从A取内存单元地址,然后发送给队列B。地址数据被消耗后,free后,就把地址发回给队列A。
相关笔记