pbuf类型和应用

下面的讨论仅限于RAW API。

按存储方式分类

1. PBUF_RAM

    从一般性的Heap中分配。可用空间大小受MEM_SIZE宏控制。可看作一般意义上的动态内存。

    用途:

    a) 将应用层中的待发送数据复制下来(当使用拷贝发送时)

    b) 构造请求类的数据包(ARP,DHCP,DNS,etc)

    c) 当发送零拷贝数据时,需要额外的pbuf用于下层协议的协议头

2. PBUF_POOL

    驱动使用这种类型的PBUF接收网卡数据包。其数量和大小受PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE这两个宏控制。

    默认情况下使用和PBUF_RAM互相独立的缓冲(可更改options使用公共缓冲?)。

    当单个PBUF_POOL不满足大小要求时,会分配多个PBUF_POOL并link在一起。

    一般用于数据包的接收。

3. PBUF_ROM/REF

    当应用程序使用零拷贝选项发送数据时,使用这种类型的pbuf保存待发送数据位置和长度。

    可用数量受MEMP_NUM_PBUF控制。

    由于这种类型的pbuf只有头部,所以占用空间不大。

    需要说明的是,PBUF_POOL和PBUF_ROM/REF这两种类型的pbuf大小和数量是在编译时确定的,所以它们都由lwip的内存池管理代码管着(memp_malloc/memp_free)。

按协议层分类

PBUF_TRANSPORT, PBUF_IP, PBUF_LINK, PBUF_RAW

原文地址:https://www.cnblogs.com/byeyear/p/3525515.html