SylixOS_LWIP协议栈学习:动态内存管理

来源:互联网 发布:stussy淘宝 编辑:程序博客网 时间:2024/06/06 15:57
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定义了内存池的大小和数量。

0 0
原创粉丝点击