LwIP之动态内存堆

151 篇文章 4 订阅 ¥299.90 ¥399.90
LwIP的动态内存堆通过内存块管理内存分配和释放。初始化堆内存形成内存块链表,分配内存时寻找合适块并拆分成新块挂接,释放时重组内存块并可能合并相邻空闲块。此外,LwIP提供mem_realloc进行内存收缩和mem_calloc进行清零分配。
摘要由CSDN通过智能技术生成

 

内存堆其实就是一个数组。为了方便管理需要将内存堆首尾组织成内存块,因此多分配的2 * SIZEOF_STRUCT_MEM大小的空间

/* 内存堆空间 */
static u8_t ram_heap[MEM_SIZE_ALIGNED + (2 * SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT];

动态内存堆会被组织成内存块,用于管理内存的分配和释放

/* 内存块结构体 */
struct mem {
  /* 指向后一个内存块 */
  mem_size_t next;
  /* 指向前一个内存块 */
  mem_size_t prev;
  /* 内存块是否被使用 1:被使用 0:未使用 */
  u8_t used;
};

 

初始化堆内存,将对内部组织成内存块链表。

/* 内存堆初始化 */
void mem_init(void)
{
  struct mem *mem;

  /* 内存堆地址 */
  ram = LWIP_MEM_ALIGN(ram_heap);

  /* 将内存堆首部组织成一个内存块,该内存块包含整个内存堆有效区域 */
  mem = (struct mem *)ram;
  mem->next = MEM_SIZE_A
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值