说在前面:
这是通过 “幕布”写的思维导图笔记。文字看起来效果没有思维导图好,不知为何思维导图转正的图片上传不了,所以开启了一个笔记在线分享版。点击阅读。
文字版本:
- 动态内存管理
- 库自动分配
- 动态内存堆(Heap)
- 优点
- 随心所欲分配需要的大小合理内存块
- 缺点
- 释放后会存在内存碎片
- 开辟内存堆,模拟 C 运行时库的内存分配
- mem_init( ) 内存堆的初始化函数
- mem_malloc( ) 申请分配内存
- mem_calloc( ) 是对 mem_malloc( )函数的简单包装
- 动态内存池
- 用户需定义
- MEM_USE_POOLS = 1
- MEM_USE_CUSTOM_POOLS = 1
- LWIP_MALLOC_MEMPOOL_START
- LWIP_MALLOC_MEMPOOL(20, 256)
- LWIP_MALLOC_MEMPOOL(10, 512)
- LWIP_MALLOC_MEMPOOL(5, 1512)
- LWIP_MALLOC_MEMPOOL_END
- 用户需定义
- 优点
- 动态内存池(Pool)
- 优点
- 实现简单,内存的分配、释放效率高,有效防止内存碎片的产生
- 缺点
- 浪费部分内存
- 实现
-
- 里面的东西可以被简化为诸多条 LWIP_MEMPOOL(name,num,size,desc)。 又由于用了 define 关键字将 LWIP_MEMPOOL(name,num,size,desc)定义为+((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size))), 所以, memp_std.h 被编译后就为一条一条的+(), +(), +(), +() 数组 memp_memory 等价定义为: static u8_t memp_memory [ MEM_ALIGNMENT – 1 +()+() ….];
- 全局变量
-
- 优点