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

  • 相关阅读:
    http
    jquery
    wsgi
    urls控制器
    模板template
    ORM
    C++中获取汉字拼音首字缩写/全拼及生僻字的处理
    C语言函数strstr
    CString 成员函数用法
    判断字符串中是否存在中文
  • 原文地址:https://www.cnblogs.com/byeyear/p/3525515.html
Copyright © 2011-2022 走看看