内存管理"/>
lwip内存管理
一、内存堆:
1、内存堆小小结构体:
//mem.c
struct mem {
mem_size_t next;
mem_size_t prev;
u8_t used;
};
2、内存堆操作函数:
//mem.c
void mem_init(void)
void mem_free(void *rmem)
void *mem_realloc(void *rmem,mem_size_t newsize)
void *mem_malloc(mem_size_t size)
void *mem_calloc(mem_size_t count,mem_size_t size)
二、内存池:
1、内存池小小结构体:
//memp.c
struct memp {
struct memp *next;
#if MEMP_OVERFLOW_CHECK
const char *file;
int line;
#endif
};
2、POOL的类型:
(1)POOL有许多种,opt.h中配置,其类型大小固定,个数需要用户配置。
(2)POOL类型:1)MEMPOOL -----standard pools
2)MALLOC_MEMPOOL -----used by mem_malloc in mem.c
3)PBUF_MEMPOOL -----pbuf's,include pbuf struct.
(3)各类POOL:
//memp_std.h
1)一些标准类型:例如:#if LWIP_UDP
LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB")
#endif /* LWIP_UDP */
2) #ifndef LWIP_MALLOC_MEMPOOL
#define LWIP_MALLOC_MEMPOOL(num,size) LWIP_MEMPOOL(POOL_##size,num,size,"MALLOC_"#size)
#endif
3) #ifndef LWIP_PBUF_MEMPOOL /* This treats "pbuf pools" just like any other pool. Allocates buffers for a pbuf struct AND a payload size */
#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc)
#endif
4)总之:LWIP_MEMPOOL(XXX, MEMP_NUM_XXX, sizeof(struct XXX), "XXX") 包括:pool名称,此pool类型的个数,结构体大小,说明。
3、协议栈与缓冲池管理相关全局变量(5个):
//memp.c
memp_num:此静态数组用于保存各类缓冲池的成员数目。
memp_sizes:此静态数组用于保存各类缓冲池的结构大小。
memp_tab: 此指针数组指向各类缓冲池当前空闲节点。
memp_desc: 描述。
memp_memory: 用于确定缓冲池所使用的内存缓冲区。
4、实现函数:
//memp.c
memp_init();
memp_malloc();
memp_free();
memp_sanity();
memp_overflow_cheek_element();
memp_overflow_check_all();
memp_overflow_init();
5、联系:
//memp.h
/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */
typedef enum {
#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name,
#include "lwip/memp_std.h"
MEMP_MAX
} memp_t;转换为:
typedef enum {
MEMP_RAM_PCB,MEMP_PBUF_POOL,MEMP_UDP_PCB,MEMP_TCP_PCB,.......
MEMP_MAX //POOL的种类个数
} memp_t;
更多推荐
lwip内存管理
发布评论