这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 堆heap在STM32中的作用与使用

共16条 2/2 1 2 跳转至
高工
2026-07-31 11:02:01     打赏
11楼

感谢分享!


助工
2026-07-31 11:23:03   被打赏 40 分(兑奖)     打赏
12楼

目前接触到的嵌入式项目,基本都是使用FreeRTOS,避免不了使用pvPortMalloc与vPortFree,再者采用heap_4.c与后申请的内存先释放,这样最大化内存复用的效率与减少内存碎片化。不过在此也分享一个内存泄漏的案例:

前几天和同事一起做固件升级时,我们沿用了一套老旧的升级流程和代码。虽然我们各自维护的固件大小差异很大(我的程序内容较少,他的程序包含多层封装、内容更多、文件体积大),但测试下来,我的源码能正常升级他的固件,他的程序也能正常升级我的固件,互刷都没有问题。然而,当尝试用他的程序升级他自身的固件时,却反复失败。经过排查,最终定位到一个内存管理上的隐患:

  • 代码中用一个指针指向了一块申请的缓冲区进行数据处理,之后把申请的缓冲区指针指向 NULL;

  • 后续代码中虽有申请的缓冲区指针非 NULL 判断才执行释放,但此时指针已为空,导致释放逻辑被跳过;

  • 随着升级流程的推进,新的缓冲区不断被申请,而旧的缓冲区始终未被释放,内存越积越多;

  • 最终因可用内存耗尽,升级任务失败。


菜鸟
2026-07-31 11:31:35     打赏
13楼

确认过不用 malloc,就把 Heap_Size 直接设为 0。但如果工程里引用了第三方库(比如加密、文件系统),先全局搜一遍确认没有 malloc 调用,否则库内部偷偷申请内存会直接返回 NULL,比内存不足更隐蔽。


专家
2026-07-31 12:16:40     打赏
14楼

使用malloc()会不会导致存储空间碎片化?


专家
2026-07-31 12:21:55     打赏
15楼

建立完整的回收机制,没有操作系统参与,malloc()会安全吗?C语言的产生和应用,是在计算上实现的,有操作系统参与。转移到单片机上时,我不知道malloc这样的处理,是按照什么样的规则操作。难道单片机的底层有类似操作系统的管理系统?


菜鸟
2026-07-31 12:28:03     打赏
16楼

车规MCU开发规范中 禁止使用malloc 防止malloc导致的程序崩溃


共16条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]