You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无操作系统单片机堆内存管理:malloc地址跟踪及free后内存复用问题

代码示例中的内存复用问题

先看代码:

char *x;
char *y;
char *z;

x=(char*)malloc(10);
y=(char*)malloc(10);
free(x);
z=(char*)malloc(10);

结论:只要malloc/free实现支持内存回收(即free有实际作用),后续malloc给z分配时会复用x释放的内存块。

原因:free(x)执行后,x指向的10字节内存会被标记为空闲。调用malloc(10)时,内存分配器会优先扫描空闲块列表,找到这个大小完全匹配的空闲块,直接重新分配给z,不会去堆末尾申请新空间。

只有使用“只进不退”的极简malloc实现(free是空操作)时,x的内存才不会被复用,z会在y之后的堆地址分配,但这种实现基本不会用于需要回收内存的场景。


内容的提问来源于stack exchange,提问作者hal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:05:07