包括heap1、heap2、heap3、heap4、heap5。
各heap的区别:
Heap1 | Heap2 | Heap3 | Heap4 | Heap5 | |
---|---|---|---|---|---|
分配 | ✓ | ✓ | Malloc | ✓ | ✓ |
回收 | ✗ | ✓ | free | ✓ | ✓ |
链接 | ✗ | 按块大小升序链接 | 与平台相关 | 按地址升序链接 | 按地址升序链接 |
合并 | ✗ | ✗ | 与平台相关 | ✓ | ✓ |
内存 | 单堆区 | 单堆区 | 单堆区 | 单堆区 | 多堆区 |
各heap说明:
Heap1:
- 只分配,不回收。
- 适合不会执行删除任务、队列、信号量、互斥量等的程序。
Heap2:
- 能分配,能回收。但是回收时不处理碎片。
- 适合申请固定大小内存的工程。
- 其工作原理:将内存块按块大小升序相连(块地址是混乱的),记录块信息的结构体空间会随着申请不断增加,并且不会得到释放,因为要通过这些块信息来链接。所以,如果没申请过