SylixOS_LWIP协议栈学习:动态内存管理
2017-04-11 15:51
302 查看
1.LWIP中的动态内存管理有三种方式
运行时C库自带的内存分配方式、LWIP中自带的内存堆(HEAP)分配方式、内存池(POOL)分配方式。
内存堆的特点是对一块事先分配好的内存块进行合理有效的组织和管理,主要用于任意大小的内存分配。缺点是容易产生内存碎片。
内存池的特点是预先开辟许多固定大小的内存块组织成链表,实现快速分配/回收,且不会产生内存碎片,但大小固定会带来一定内存浪费。
2.LWIP宏编译开关
SylixOS在(/libsylixos/SylixOS/include/network/lwip/opt.h)中通过宏配置选不同的内存管理方式:
若定义MEM_LIBC_MALLOC =
1,直接使用C库中的malloc、free来分配动态内存;否则使用LWIP自带的mem_malloc、mem_free等函数。
若定义MEMP_MEM_MALLOC =
1,则用内存堆来实现内存池分配,使用这种方式得考虑是否能忍受内存堆分配带来的时间延迟。
若定义MEM_USE_POOLS =
1,则用内存池来实现内存堆的分配,使用这种方式得考虑是否能忍受因为POOL内存固定大小而带来的内存浪费。
总结:
C库中的malloc、free和LWIP自带的mem_malloc、mem_free具有很大相似性,这两种策略使用者只能从中选择一种,通过MEM_LIBC_MALLOC来实现。
当它被定义为 1 时则使用标准 C运行时库自带的内存分配策略,而为 0 时则使用 LWIP 自身的动态内存堆分配策略。
在(/libsylixos/SylixOS/config/net/net_perf_cfg.h)中,对于内存堆和内存池的大小是可以配置的,通过合理的配置可以有效提升性能。
LW_CFG_LWIP_MEM_SIZE定义了内存堆区大小,LW_CFG_LWIP_POOL_SIZE和LW_CFG_LWIP_NUM_POOLS定义了内存池的大小和数量。
运行时C库自带的内存分配方式、LWIP中自带的内存堆(HEAP)分配方式、内存池(POOL)分配方式。
内存堆的特点是对一块事先分配好的内存块进行合理有效的组织和管理,主要用于任意大小的内存分配。缺点是容易产生内存碎片。
内存池的特点是预先开辟许多固定大小的内存块组织成链表,实现快速分配/回收,且不会产生内存碎片,但大小固定会带来一定内存浪费。
2.LWIP宏编译开关
SylixOS在(/libsylixos/SylixOS/include/network/lwip/opt.h)中通过宏配置选不同的内存管理方式:
若定义MEM_LIBC_MALLOC =
1,直接使用C库中的malloc、free来分配动态内存;否则使用LWIP自带的mem_malloc、mem_free等函数。
若定义MEMP_MEM_MALLOC =
1,则用内存堆来实现内存池分配,使用这种方式得考虑是否能忍受内存堆分配带来的时间延迟。
若定义MEM_USE_POOLS =
1,则用内存池来实现内存堆的分配,使用这种方式得考虑是否能忍受因为POOL内存固定大小而带来的内存浪费。
总结:
C库中的malloc、free和LWIP自带的mem_malloc、mem_free具有很大相似性,这两种策略使用者只能从中选择一种,通过MEM_LIBC_MALLOC来实现。
当它被定义为 1 时则使用标准 C运行时库自带的内存分配策略,而为 0 时则使用 LWIP 自身的动态内存堆分配策略。
在(/libsylixos/SylixOS/config/net/net_perf_cfg.h)中,对于内存堆和内存池的大小是可以配置的,通过合理的配置可以有效提升性能。
LW_CFG_LWIP_MEM_SIZE定义了内存堆区大小,LW_CFG_LWIP_POOL_SIZE和LW_CFG_LWIP_NUM_POOLS定义了内存池的大小和数量。
相关文章推荐
- SylixOS_LWIP协议栈学习:以太网网卡接口部分初始化
- SylixOS_LWIP协议栈学习:数据包管理
- SylixOS_LWIP协议栈学习:网络接口结构
- LwIP协议栈学习--内存管理
- LwIP协议栈的学习与应用
- 终于找到最全的(LwIP协议栈学习--内存管理)
- lwip协议栈学习---udp
- [LWIP学习]--tcpip_input,tcpip_inpkt,tcpip_thread函数分析(协议栈入口)
- ARM硬件平台上基于UCOS移植Lwip网络协议栈 分类: 嵌入式开发学习 2015-06-14 10:33 55人阅读 评论(1) 收藏
- LwIP协议栈学习--内存管理
- LwIP 协议栈源码详解 ——TCP/IP 协议的实现(三:动态内存管理)
- LwIP协议栈学习--内存管理
- Bluetooth协议栈学习之SDP
- lwip协议栈函数返回值定义
- Bluetooth协议栈学习之SDP
- FPGA学习心得及(flash读写,+lwip+数据发送等问题)
- lwip协议栈函数返回值定义
- 协议栈开发学习总结
- DIY_DE2之DM9000A网卡调试系列例程(三)——基于LWIP协议栈的TCP/IP实现
- ZIGBEE2006协议栈学习