zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    bzoj2287 [POJ Challenge]消失之物
    bzoj4504 K个串
    Tjoi2016&Heoi2016 字符串
    bzoj2555 SubString
    WC2017 游记
    《大灌篮》观后感
    Codeforces Round #394 (Div. 2)
    bzoj3489 A simple rmq problem
    Goodbye Bingshen
    COGS2216 你猜是不是KMP
  • 原文地址:https://www.cnblogs.com/byeyear/p/3525515.html
Copyright © 2011-2022 走看看