1 堆的初始化概览
idf会在启动过程中初始化heap
组件,初始化主要做了如下几件事:
- 找出所有连续的内存区域
- 这些内存区域如果有毗邻且
caps
一致的则合并之
- 在这些内存区域上建立堆
- 通过
heap_t
将各个堆串成单向链表以便管理,表头为registered_heaps
- 在启动的末期(当前是在
main_task
中)将原本用于启动栈的内存归还给堆
初始化完成之后,内存中会形成这样的结构:

至此,铺垫结束,下面看源码。
2 堆的初始化源码分析
在初始化阶段,do_core_init
会调用heap_caps_init
来初始化堆。简单浏览一遍这个函数:
void