LWIP协议:内存管理,pbuf内存分配

LwIP协议中动态内存管理方式主要有两种:

1.动态内存分配策略:在内存中找到一个大的空闲块(比预分配的大),分配出合适的内存块后,把剩余的归还回去。优点:内存浪费少。缺点:频繁分配释放容易造成内存碎片。

mem_init:内存堆初始化函数。

mem_calloc:

void *mem_calloc(mem_size_t count, mem_size_t size)
{
  void *p;

  /* allocate 'count' objects of size 'size' */
  p = mem_malloc(count * size);
  if (p) {
    /* zero the memory */
    memset(p, 0, count * size);
  }
  return p;
}

传入要分配的内存堆的大小,并且memset为0。

2.动态内存分配策略:某种内存池的大小是固定的,分配该类只需要提供分配的pool个数,多种类型的pool连续放置,分配释放效率高,内存碎片少,但是会造成内存浪费。

LWIP协议:内存管理,pbuf内存分配_第1张图片


LwIP中最重要的,就是数据包的传输,数据包的存储用pbuf,pbuf结构体:

LWIP协议:内存管理,pbuf内存分配_第2张图片

LwIP由pbuf组成的链表来存储数据,每个pbuf结构体包括:指向下一个pbuf结构体的next指针,payload指针指向数据。len为当前pbuf结构体数据的长度,tot_len为该pbuf节点后,剩余的数据长度。type就是pbuf的类型。

pbuf的类型有四种:PBUF_RAM,PBUF_ROM,PBUF_REF,PBUF_POOL

1.PBUF_RAM:

使用mem_malloc分配,大小包括头部,offset(存放tcp头和ip头),以及数据长度。

分配的结构:

LWIP协议:内存管理,pbuf内存分配_第3张图片

2.PBUF_POOL:

LWIP协议:内存管理,pbuf内存分配_第4张图片

2.PBUF_ROM和PBUF_REF:

都是调用mem_molloc分配一个pbuf指针:

LWIP协议:内存管理,pbuf内存分配_第5张图片

你可能感兴趣的:(FPGA接口与协议)